it-swarm.com.de

Android-Animation wiederholt sich nicht

Ich versuche, eine einfache Animation zu erstellen, die sich mehrmals (oder unendlich oft) wiederholt.
Es scheint, dass Android:repeatCount nicht funktioniert!
Hier ist meine Animationsressource von /res/anim/first_animation.xml:

<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shareInterpolator="false"
    Android:repeatCount="infinite"
    >
    <scale
        Android:interpolator="@Android:anim/decelerate_interpolator"
        Android:duration="500"
        Android:fromXScale="1.0"
        Android:fromYScale="1.0"
        Android:toXScale="1.2"
        Android:toYScale="1.2"
        Android:pivotX="50%"
        Android:pivotY="50%"
        Android:fillAfter="false" />
    <scale
        Android:interpolator="@Android:anim/accelerate_interpolator"
        Android:startOffset="500"
        Android:duration="500"
        Android:fromXScale="1.2"
        Android:fromYScale="1.2"
        Android:toXScale="1.0"
        Android:toYScale="1.0"
        Android:pivotX="50%"
        Android:pivotY="50%"
        Android:fillAfter="false" />
</set>

Zuerst sollte das Bild in 500 ms von 1,0 auf 1,2 skaliert werden.
Und skalieren Sie es in 500 ms wieder auf 1,0.
So verwende ich es:

Animation firstAnimation = AnimationUtils.loadAnimation(this, R.anim.first_animation);
imgView.startAnimation(firstAnimation);

Es macht einen Zyklus und endet dann. 
Es vergrößert sich, steigt dann ab und stoppt dann.

Wie kann ich diese Arbeit wie beabsichtigt machen?

77
Pavel Chernov

Update: Im September 2011 beendete ein Android-Ingenieur dieses Problem größtenteils. Die Attribute, die in XML ignoriert wurden, funktionieren jetzt, mit Ausnahme von repeatCount und fillEnabled, die immer noch ignoriert werden (absichtlich aus irgendeinem Grund). Daher ist es leider immer noch nicht leicht, eine AnimationSet zu wiederholen.

Einzelheiten finden Sie in der Übersicht in aktualisierte Dokumente (erläutert, welche Attribute ignoriert werden, welche Arbeit und welche an Kinder weitergegeben werden). Und für ein tieferes Verständnis dessen, was fillAfter, fillBefore und fillEnabled tatsächlich tun, lesen Sie den Blogpost des Ingenieurs (Chet Haase) darüber hier .


Ursprüngliche Antwort

Um die Antworten von Pavel und anderen zu erweitern: Es ist wahr, dass das <set>-Tag lächerlich fehlerhaft ist. Es kann nicht korrekt mit repeatCount und einer Reihe anderer Attribute umgehen.

Ich habe ein paar Stunden damit verbracht, herauszufinden, mit was es umgehen kann und was nicht, und habe hier einen Fehlerbericht/ein Problem eingereicht: Ausgabe 17662

Zusammenfassend (dies betrifft AnimationSets):

setRepeatCount ()/Android: repeatCount

Dieses Attribut (wie auch repeatMode) funktioniert nicht in Code oder XML. Dies macht es schwierig, eine ganze Reihe von Animationen zu wiederholen.

setDuration ()/Android: Dauer 

Das Festlegen dieser Einstellung für ein AnimationSet im Code WORKS (überschreibt alle Zeitdauern von untergeordneten Animationen), jedoch nicht, wenn sie im XML-Tag enthalten sind

setFillAfter ()/Android: fillAfter 

Dies funktioniert sowohl in Code als auch in XML für das Tag. Seltsamerweise habe ich es auch zum Funktionieren gebracht, ohne dass fillEnabled auf true gesetzt werden muss.

setFillBefore ()/Android: fillBefore 

Scheint in Code und XML keine Auswirkung zu haben

setFillEnabled ()/Android: fillEnabled

Scheint in Code und XML keine Auswirkung zu haben. Ich kann fillAfter immer noch dazu bringen, zu arbeiten, ohne fillEnabled hinzuzufügen oder fillEnabled auf false zu setzen.

setStartOffset ()/Android: startOffset

Dies funktioniert nur in Code und nicht in XML.

62
Tony Chan

Ich habe festgestellt, dass <set> tag eine fehlerhafte Implementierung in der Klasse AnimationSet hat.
Es kann nicht richtig mit repeatCount umgehen.
Was wir tun können, ist das Setzen von repeatCount direkt in <scale> tag.

Diese XML-Ressource funktioniert gut:

<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:interpolator="@Android:anim/accelerate_decelerate_interpolator"
    Android:duration="200"
    Android:fromXScale="1.0"
    Android:fromYScale="1.0"
    Android:toXScale="1.05"
    Android:toYScale="1.05"
    Android:pivotX="50%"
    Android:pivotY="50%"
    Android:repeatMode="reverse"
    Android:fillAfter="false"
    Android:repeatCount="24"
/>

Leider ist dies auf nur eine Animation gleichzeitig beschränkt.
Wir können auf diese Weise keine Animationssequenz definieren ...

41
Pavel Chernov

Sie sollten das Attribut einschließen

Android:repeatCount="infinite"

Aber in deiner "Maßstab" Animation nicht in "Set"

38
Macumbaomuerte

Um eine sich wiederholende Animation zu erhalten, habe ich den Animationslistener verwendet und die Animation am Ende erneut aufgerufen. Dies bewirkt, dass ein Kamera-Fadenkreuz wie eine Animation mit Klammern fokussiert wird.

Hier ist das Animationslayout-XML

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<scale
    Android:fromXScale="1.0"
    Android:toXScale=".7"
    Android:fromYScale="1.0"
    Android:pivotX="50%"
    Android:pivotY="50%"
    Android:toYScale=".7"
    Android:duration="1000"/>
<scale 
    Android:duration="1000"
    Android:fromXScale=".7"
    Android:toXScale="1.0"
    Android:fromYScale=".7"
    Android:pivotX="50%"
    Android:pivotY="50%"
    Android:toYScale="1.0"
    Android:startOffset="1000"/>

</set>

Hier ist der Java-Code

 public void startAnimation() {

            View brackets = findViewById(R.id.brackets);
            brackets.setVisibility(View.VISIBLE);

            Animation anim = AnimationUtils.loadAnimation(BuzzFinderActivity.this, R.anim.crosshair_focusing);
            anim.setAnimationListener(new AnimationListener() {

                @Override
                public void onAnimationEnd(Animation arg0) {
                    Animation anim = AnimationUtils.loadAnimation(BuzzFinderActivity.this, R.anim.crosshair_focusing);
                    anim.setAnimationListener(this);
                    brackets.startAnimation(anim);

                }

                @Override
                public void onAnimationRepeat(Animation arg0) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onAnimationStart(Animation arg0) {
                    // TODO Auto-generated method stub

                }

            });


            brackets.startAnimation(anim);
}
31
Danuofr

Ich war auch mit dem gleichen Problem konfrontiert ...__ Ich habe Android: repeatCount = "unendlich" in XMl-Datei aufgenommen.

  <translate 
           Android:fromXDelta="0"
           Android:toXDelta="80"
           Android:duration="1000"
           Android:repeatCount="infinite"   
           Android:repeatMode="reverse" 
           Android:pivotX="50%"
           Android:pivotY="50%"                             
           Android:fillAfter="true"/>

10
abhilash

sie können diesen Code ausprobieren ... In Ihrem Code fügen Sie einfach Folgendes hinzu:

firstAnimation.setRepeatCount(5);

Dadurch wird die Animation für eine bestimmte Zeit wiederholt

firstAnimation.setRepeatCount(Animation.INFINITE);
firstAnimation.setRepeatMode(Animation.INFINITE);

Dadurch wird die Animation unbegrenzt wiederholt.

9
Informatics

Fügen Sie Ihrem Projekt die folgende Klasse hinzu:

import Android.view.View;
import Android.view.animation.Animation;

public class AnimationRepeater implements Animation.AnimationListener
{
    private View view;
    private Animation animation;
    private int count;

    public AnimationRepeater(View view, Animation animation)
    {
        this.view = view;
        this.animation = animation;
        this.count = -1;
    }

    public AnimationRepeater(View view, Animation animation, int count)
    {
        this.view = view;
        this.animation = animation;
        this.count = count;
    }

    public void start()
    {
        this.view.startAnimation(this.animation);
        this.animation.setAnimationListener(this);
    }

    @Override
    public void onAnimationStart(Animation animation) { }

    @Override
    public void onAnimationEnd(Animation animation)
    {
        if (this.count == -1)
            this.view.startAnimation(animation);
        else
        {
            if (count - 1 >= 0)
            {
                this.animation.start();
                count --;
            }
        }
    }

    @Override
    public void onAnimationRepeat(Animation animation) { }
}

Führen Sie für eine Endlosschleife Ihrer Ansicht folgende Schritte aus:

Animation a = AnimationUtils(Context, R.anim.animation);
new AnimationRepeater(View, a).start();

Wenn Sie die Animation nur N-mal wiederholen möchten, gehen Sie wie folgt vor:

Animation a = AnimationUtils(Context, R.anim.animation);
new AnimationRepeater(View, a, int N).start();

N steht für die Anzahl der Wiederholungen.

2
domi

Ich habe versucht, mit Daniels Code die genaue Anzahl der Animationen anzuzeigen und hatte ein Problem: Die Animation wurde ungefähr n/2 Mal angezeigt, wenn n Mal erwartet wurde. 

Also habe ich Daniels Code geändert:

//...
@Override
public void onAnimationEnd(Animation arg0) {
    mCurrentCount++;
    if (mCurrentCount < REPEAT_COUNT) {  
        Animation anim = AnimationUtils.loadAnimation(BuzzFinderActivity.this, R.anim.crosshair_focusing);
        anim.setAnimationListener(this);
        brackets.post(new Runnable() {
            @Override
            public void run() {
                brackets.startAnimation(anim);
            }
        }  
    } 
}
//... 

Bei der oben gezeigten Variante wird die Animation mit REPEAT_COUNT-Zeiten dargestellt, da die View.post () - Methode die Möglichkeit bietet, eine neue Animation zu starten, nachdem alle mit der vorherigen Animation verbundenen Aktionen abgeschlossen wurden.

2
Denis

sie müssen nur eine Zeile in Ihren XML-Code einfügen, die ich unten vorgeschlagen habe. 

<scale
    Android:duration="500"
    Android:fromXScale="1.0"
    Android:fromYScale="1.0"
    Android:toXScale="1.2"
    Android:toYScale="1.2"
    Android:pivotX="50%"
    Android:pivotY="50%"
    Android:repeatCount="infinite" // just add this one line 
    Android:fillAfter="false"
    />
</set>
2
Mitesh Sawant

Mit Android-SDK-Version 4.0.3:

In den gegebenen Animationselementen:

Android: repeatCount = "- 1"

macht es eine unendliche Animation.

2
Kurt Junghanns

Ich habe dieses Problem vorher mit Reverse in meinem Projekt gelöst. 

<scale Android:interpolator="@Android:anim/decelerate_interpolator" Android:duration="500" Android:fromXScale="1.0" Android:fromYScale="1.0" Android:toXScale="1.2" Android:toYScale="1.2" Android:pivotX="50%" Android:pivotY="50%" Android:repeatMode="reverse" Android:repeatCount="infinite" />

1
Huseyin

ich habe das zu tun ... Ich habe versucht, die Ansicht zu bekommen, sich kontinuierlich im Kreis zu drehen.

vorher habe ich rotation.setRepeatMode (-1) verwendet, aber das hat nicht funktioniert. auf setrepeatcount umgestellt und es funktioniert. Dies ist bei Jelly Bean 4.2.2

 ObjectAnimator rotation = ObjectAnimator.ofFloat(myview,
                          "rotation", 360).setDuration(2000);
                rotation.setRepeatMode(-1);
          rotation.setRepeatCount(Animation.INFINITE); 
 rotation.start();
1
j2emanue

Ich mache die meisten meiner Sachen programmgesteuert und bin vielleicht zu spät oder ineffizient bei dieser Sache, aber ich habe das Ziel des wiederholten Animationssatzes erreicht (ich habe sogar 2 alternierende Animationssätze). Alles, was dieser Code tut, ist einfach ein Bild einblenden, pausieren, dann ausblenden, ein anderes Bild einblenden, pausieren, ausblenden und das erste zurückbringen (spülen und wiederholen). Ich habe zuerst meine Imageviews definiert:

    final ImageView purple = (ImageView)findViewById(R.id.purp);
    final ImageView yellow = (ImageView)findViewById(R.id.yell);
    purple.setVisibility(View.INVISIBLE);
    yellow.setVisibility(View.INVISIBLE);

Dann erstellte ich zwei Timer, Task-Timer und Handler, um festzulegen, wann eine Animation gestartet und gestoppt werden muss:

    Timer p = new Timer();
    TimerTask pu = new TimerTask() {
        public void run() {
                handler1.post(new Runnable() {
                        public void run() 
                        {
                           fadein(purple);
                        }
               });
        }};
        p.schedule(pu, 6000, 12000);

    final Handler handler2 = new Handler();

    Timer y = new Timer();
    TimerTask ye = new TimerTask() {
        public void run() {
                handler2.post(new Runnable() {
                        public void run() 
                        {
                           fadein(yellow);
                        }
               });
        }};

        y.schedule(ye, 0, 12000);

Anstatt Animationssätze durch Hinzufügen von Animationen zu erstellen, animiere ich die Zuhörer, um zu bestimmen, wann eine Animation gestartet werden soll:

public void fadein (final ImageView image)
{
    Animation anim = new AlphaAnimation(0, 1);

    anim.setDuration(2000);

    image.startAnimation(anim);
    anim.setAnimationListener(new AnimationListener() {
        public void onAnimationEnd(Animation animation) 
        {
            image.clearAnimation();
            image.invalidate();
            pause(image);

        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub

        }
    });
}    
public void pause (final ImageView image)
{
    Animation anim = new AlphaAnimation(1, 1);

    anim.setDuration(2000);

    image.startAnimation(anim);
    anim.setAnimationListener(new AnimationListener() {
        public void onAnimationEnd(Animation animation) 
        {
            image.clearAnimation();
            image.invalidate();
            fadeout(image);

        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub

        }
    });
}     
public void fadeout (final ImageView image)
{
    Animation anim = new AlphaAnimation(1,0);

    anim.setDuration(2000);

    image.startAnimation(anim);
    anim.setAnimationListener(new AnimationListener() {
        public void onAnimationEnd(Animation animation) 
        {
            image.clearAnimation();
            image.invalidate();
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub

        }
    });
}    

Die Clearanimation und Ungültigmachung waren nur die vorherigen Versuche und das Richtige zu erreichen. Ich weiß nicht, ob sie benötigt werden oder nicht.

Hoffe das hilft jemandem.


Ryan

1
testingtester

ich bin gerade auf dieses Problem gestoßen, als ich an einer abwärtskompatiblen App arbeitete. so frustrierend! Am Ende habe ich eine Nice Workaround-Klasse programmiert, die von onCreate aufgerufen werden kann und jede Animationsressource in eine unbestimmte Schleife starten wird. 

die Klasse AnimationLooper ist hier verfügbar: https://Gist.github.com/2018678

0
newbyca

Ich habe dieses Problem mit Thread gelöst.

Button btn = (Button) findViewById(R.id.buttonpush);
    final TextView textview = (TextView) findViewById(R.id.hello);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            textview.setText("...................");
            final Animation animationtest = AnimationUtils.loadAnimation(MainActivity.this, Android.R.anim.slide_in_left);
            animationtest.setDuration(1000);

            final Handler handler = new Handler();
            Runnable runnable = new Runnable() {
                public void run() {
                    handler.postDelayed(this, 1500);
                    textview.startAnimation(animationtest);
                }
            };
            handler.postDelayed(runnable, 500); // start
            handler.removeCallbacks(runnable); //STOP Timer

        }
    });
0
nikeru8

Keine der oben genannten Lösungen funktionierte in meinem Fall. Die Lösung von Danuofr funktionierte für Animationssets, aber als ich Unit-Tests durchführte, steckten meine Tests in dieser Endlosschleife. Schließlich musste ich diese Animation spezifisch für meinen Fall wiederholen. Ich habe also manuell Animationen in anim_rot.xml kaskadiert hinzugefügt den Offset-Wert hinzugefügt . Ich weiß, dass es schlecht ist und für viele nicht funktionieren wird, aber es war die einzige Lösung für meinen Fall. 

anim_rot.xml

<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <rotate
        Android:duration="2000"
        Android:fromDegrees="20"
        Android:pivotX="29%"
        Android:pivotY="50%"
        Android:toDegrees="-20" />
    <rotate
        Android:duration="2000"
        Android:fromDegrees="-20"
        Android:pivotX="29%"
        Android:pivotY="53%"
        Android:startOffset="2000"
        Android:toDegrees="20" />
    <rotate
        Android:startOffset="4000"
        Android:duration="2000"
        Android:fromDegrees="20"
        Android:pivotX="29%"
        Android:pivotY="56%"
        Android:toDegrees="-20" />
    <rotate
        Android:duration="2000"
        Android:fromDegrees="-20"
        Android:pivotX="29%"
        Android:pivotY="59%"
        Android:startOffset="6000"
        Android:toDegrees="20" />
    <rotate
        Android:startOffset="8000"
        Android:duration="2000"
        Android:fromDegrees="20"
        Android:pivotX="29%"
        Android:pivotY="62%"
        Android:toDegrees="-20" />
    <rotate
        Android:duration="2000"
        Android:fromDegrees="-20"
        Android:pivotX="29%"
        Android:pivotY="65%"
        Android:startOffset="10000"
        Android:toDegrees="20" />
</set>

Ich habe dies getan, um die Animation dreimal zu wiederholen. Sie können weitere Exemplare hinzufügen, um bestimmte Zeiten zu wiederholen, indem Sie Versatzwerte hinzufügen.

0
Sachin Aggarwal

Kleine Antwort auf @Danufr, um Ressourcen vor dem erneuten Laden zu sparen.

    operator = (ImageView) findViewById(R.id.operator_loading);
  final  Animation ani = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.finding_operator);


    ani.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {

        }

        @Override
        public void onAnimationEnd(Animation animation) {

            operator.startAnimation(ani);

        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });

    operator.setAnimation(ani);
0
Mr Coder

Nachdem ich die Antworten aus dem Internet recherchiert hatte, fand ich eine Lösung, die perfekt für mich funktioniert. (Und ja, der repeatCount und repeatMode sind extrem fehlerhaft, wenn sie zusammen mit animationSet verwendet werden).

anim_rotate_fade.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:interpolator="@Android:anim/accelerate_decelerate_interpolator"
    Android:ordering="together" >

    <objectAnimator
        Android:duration="3000"
        Android:propertyName="rotation"
        Android:repeatCount="1"
        Android:valueTo="360"
        Android:valueType="floatType" />

    <objectAnimator
        Android:duration="3000"
        Android:propertyName="alpha"
        Android:repeatCount="1"
        Android:repeatMode="reverse"
        Android:valueFrom="0.0"
        Android:valueTo="0.3"
        Android:valueType="floatType" />

    <objectAnimator
        Android:duration="3000"
        Android:propertyName="y"
        Android:repeatCount="1"
        Android:repeatMode="reverse"
        Android:valueFrom="380"
        Android:valueTo="430"
        Android:valueType="floatType" />

</set>

In Aktivität: .__ (Löse es, indem du eine kurze Verzögerung nach dem Ende der Animation einführst).

ImageView starlightImageView = new ImageView(this);
starlightImageView.setImageResource(R.drawable.starlight);
final AnimatorSet animate = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.anim.anim_rotate_fade);
AnimatorListenerAdapter animatorListener = new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        new Handler().postDelayed(new Runnable() {
            @Override public void run() {
                animate.start();
            }
        }, 1000);
    }
};
animate.setTarget(starlightImageView);
animate.addListener(animatorListener);

Es gibt viele Klassen, zu denen Sie gerne recherchieren möchten, aber derzeit verwende ich objectAnimator, der sehr flexibel ist. Ich würde nicht empfehlen, Animation oder AnimationUtils zu verwenden:

  • Animation
  • AnimationUtils
  • Animator
  • AnimatorInflater
  • AnimatorListener
  • AnimatorListenerAdapter
0
morph85

Sie müssen die Vollendung der ersten Animation abwarten und dann die Animation in onStopAnimation erneut aufrufen. Versuchen Sie es mit diesem link

0
Ravi K. Sharma

Versuchen Sie, den Code einem Schleifenthread oder einer while/for-Anweisung hinzuzufügen

0
carefacerz

Ich war mit dem gleichen Problem konfrontiert, wollte aber keine Zeitsteuerungsaufgaben in Java ausführen, da der UI-Thread manchmal sehr beschäftigt ist. Also habe ich das Problem mit einem kleinen Code gelöst:

mAnimation = (AnimationSet) AnimationUtils.loadAnimation(myContext, R.anim.blink);
mIcon.startAnimation(mAnimation);
mAnimation.setAnimationListener(new AnimationListener() {
    public void onAnimationStart(Animation animation) {}
    public void onAnimationRepeat(Animation animation) {}
    public void onAnimationEnd(Animation animation) {
        mIcon.startAnimation(mAnimation);
    }
});

mit dem folgenden XML:

<alpha
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:duration="1000"
    Android:fromAlpha="0.0"
    Android:toAlpha="1.0" />

<alpha
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:duration="1000"
    Android:fromAlpha="0.9"
    Android:startOffset="1000"
    Android:toAlpha="0.0" />

Wo mIcon ein ImageView aus meinem Layout ist.

0
Jordi

es funktioniert gut 

 GifDrawable gifDrawable = (GifDrawable) gifImageView.getDrawable();
    gifDrawable.setLoopCount(0);
0
BHAVIK PANCHAL

Ich habe dieses Problem gelöst. Dies ist meine Version des Updates:

public class HelloAndroidActivity extends Activity {
private static String TAG = "animTest";
private Animation scaleAnimation;
private int currentCover = 0;
private List<ImageView> imageViews = new ArrayList<ImageView>(3);
private Button btn;
private ImageView img;

/**
 * Called when the activity is first created.
 * @param savedInstanceState If the activity is being re-initialized after 
 * previously being shut down then this Bundle contains the data it most 
 * recently supplied in onSaveInstanceState(Bundle). <b>Note: Otherwise it is null.</b>
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i(TAG, "onCreate");
    setContentView(R.layout.test);

    img = (ImageView)findViewById(R.id.testpict);
    imageViews.add(img);
    img = (ImageView)findViewById(R.id.testpictTwo);
    imageViews.add(img);
    img = (ImageView)findViewById(R.id.testpict3);
    imageViews.add(img);

    scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.photo_scale);
    scaleAnimation.setAnimationListener(new CyclicAnimationListener());

    btn = (Button)findViewById(R.id.startBtn);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            imageViews.get(0).startAnimation(scaleAnimation);
        }
    });



}

private class CyclicAnimationListener implements AnimationListener{

    @Override
    public void onAnimationEnd(Animation animation) {
        currentCover += 1;
        if(currentCover >= imageViews.size()){
            currentCover = 0;
        }
        img = imageViews.get(currentCover);
        scaleAnimation = AnimationUtils.loadAnimation(HelloAndroidActivity.this, R.anim.photo_scale);
        scaleAnimation.setAnimationListener(new CyclicAnimationListener());
        img.startAnimation(scaleAnimation);
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
        Log.d("Animation", "Repeat");
    }

    @Override
    public void onAnimationStart(Animation animation) {

    }

}

}
0
xander_blr