Android animation does not repeat

后端 未结 23 1356
囚心锁ツ
囚心锁ツ 2020-11-27 14:01

I\'m trying to make simple animation that would repeat several times (or infinitely).
It seems that android:repeatCount does not work!
Here is my anim

相关标签:
23条回答
  • 2020-11-27 14:22

    you can try this code. In your code just add,

    firstAnimation.setRepeatCount(5);
    

    This will repeat the animation for a definite time

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

    This will repeat the animation indefinitely.

    0 讨论(0)
  • 2020-11-27 14:23

    I solved this problem using thread.

    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 讨论(0)
  • 2020-11-27 14:24

    To get a repeating animation I utilized the animation listener, and called the animation again when it ended. This does a camera reticule focusing like animation with brackets.

    Here is the animation layout 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>
    

    Here is the 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);
    }
    
    0 讨论(0)
  • 2020-11-27 14:25

    None of the above solutions worked in my case. The solution by Danuofr did work for animation set but when I was doing unit testing, my tests used to get stuck in this infinite loop. Finally, specific to my case, I needed to repeat this animation specific number of times. So, I manually added copies of my animation in anim_rot.xml in a cascaded manner adding the offset value. I know it's bad and won't work for many but it was the only workaround for my case.

    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>
    

    I did this to repeat the animation 3 times. You can add more copies to repeat it specific times by adding offset values.

    0 讨论(0)
  • 2020-11-27 14:28

    I was also facing the same problem.. i included android:repeatCount="infinite" in XMl file..now its working fine...

      <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"/>
    

    0 讨论(0)
  • 2020-11-27 14:28

    With android sdk version 4.0.3:

    In the given animation elements:

    android:repeatCount="-1"

    makes it an infinite animation.

    0 讨论(0)
提交回复
热议问题