2011-09-02 9 views
17

Udało mi się wykonać jedną stronę animacji przy użyciu Translate Animation oznacza, że ​​obraz przechodzi od góry do dołu. Oto kod:Jak przesuwać obraz w górę iw dół w trybie ciągłym za pomocą animacji tłumaczenia w systemie Android?

private ImageView mScanner; 
private Animation mAnimation; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mScanner = (ImageView)findViewById(R.id.Scanner); 

    mAnimation = new TranslateAnimation(0, 0, 0, 500); 
    mAnimation.setDuration(10000); 
    mAnimation.setFillAfter(true); 
    mAnimation.setRepeatCount(-1); 
    mAnimation.setRepeatMode(Animation.REVERSE); 
    mScanner.setAnimation(mAnimation); 
    mScanner.setVisibility(View.VISIBLE); 
} 

Teraz chcę, aby obraz docierał do dolnej części ekranu, powinien zacząć się cofać. Jak mogę to zrobić?

Uwaga: Wykonano tryb odwrotny. Zobacz kod. Ale teraz problem polega na tym, że linie pozostawiają linie podczas przechodzenia od dołu do góry. Podobnie jak dołączony obraz. Jak usunąć te linie? screenshot

+0

Wyświetl moje rozwiązanie: http://stackoverflow.com/a/38934624/2535875 –

Odpowiedz

33

zmodyfikować kod według tego:

mScanner.setVisibility(View.VISIBLE); 
    mAnimation = new TranslateAnimation(
      TranslateAnimation.ABSOLUTE, 0f, 
      TranslateAnimation.ABSOLUTE, 0f, 
      TranslateAnimation.RELATIVE_TO_PARENT, 0f, 
      TranslateAnimation.RELATIVE_TO_PARENT, 1.0f); 
    mAnimation.setDuration(10000); 
    mAnimation.setRepeatCount(-1); 
    mAnimation.setRepeatMode(Animation.REVERSE); 
    mAnimation.setInterpolator(new LinearInterpolator()); 
    mScanner.setAnimation(mAnimation); 

A ponadto stosować xml zamiast obrazu. Zobacz poniższy kod i umieść go w swoim src ImageView.

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line"> 
    <solid android:color="#0000FF"/> 
    <size android:width="480dp" 
     android:height="10dp"/> 
    <corners android:radius="1dp"/> 
    <stroke android:width="3dp" 
     android:color="#000000"/> 
</shape> 

Mam nadzieję, że ci to pomoże.

+1

Perfect. Zawarłem xml i usunąłem 'mAnimation.setFillAfter (true);' linię i działało tak, jak chciałem. Dzięki za pomoc. –

+1

Hej, twój kod nie działa w 2.3.6. – sandy

+0

@sandy Sprawdziłem ten kod od 2.1 do 4.2 i działa on na wszystkich moich urządzeniach. Proszę nie próbować używać obrazu, ponieważ miałem problem z obrazem, a następnie użyłem utworzonej linii opartej na "XML" jako zamiennika obrazu używanego w projekcie. Prosimy o sprawdzenie kodu i spróbuj jeszcze raz. Dzięki –

2

Myślę, że musisz usunąć mAnimation.setFillAfter(true);, ponieważ oznacza to, że pozostanie na stałe tam, gdzie się zatrzyma.

Aby powrócić do pozycji początkowej, można wykonać kompletny zestaw animacji zarówno do przesuwania w górę, jak i do dołu lub zrobić dwa osobne i po pierwszym zakończeniu rozpocząć drugi, chociaż nie ma powodu do naśladowania takie podejście.

+0

Zrobiłem to, co chcę, ale teraz otrzymuję nowy problem, do którego dołączam obraz. Zaktualizowałem moje pytanie. Proszę spojrzeć. Dzięki –

7

Musisz ustawić właściwość powtórz

android: REPEATMODE

int. Jak zachowuje się animacja po osiągnięciu końca animacji. android: repeatCount musi być ustawiony na dodatnią liczbę całkowitą lub "-1", aby ten atrybut działał. Ustaw "odwróć", aby uzyskać kierunek odwrócenia animacji przy każdej iteracji lub "powtórz", aby za każdym razem mieć pętlę animacji od początku.

Animation a; 
a.setRepeatMode(Animation.REVERSE); 
+0

działa, ale pozostawiając linię podczas ruchu w kierunku wstecznym oznacza od dołu do góry. Jak usunąć tę linię, aby wyglądało na to, że skanuje. Zaktualizowałem swój kod, a także załączam obraz. Dzięki –

Powiązane problemy