Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android animation does not repeat

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 animation resource from /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> 

First it should scale image from 1.0 to 1.2 size in 500 ms.
And then scale it back to 1.0 in 500 ms.
Here is how I'm using it:

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

It makes one cycle and then finishes.
It scales up, then scales down ans then stops.

How can I make this work as intended?

like image 574
Pavel Chernov Avatar asked Dec 18 '10 23:12

Pavel Chernov


People also ask

Is animation possible on Android?

On Android 4.4 (API level 19) and higher, you can use the transition framework to create animations when you swap the layout within the current activity or fragment. All you need to do is specify the starting and ending layout, and what type of animation you want to use.

How do I turn off animations on Android?

To access the Accessibility features on your Android device open the Settings app . In the Settings app, select Accessibility from the list. Now scroll down to the Display section and select Remove Animations to set the toggle switch to On.


1 Answers

Update: Back in Sep, 2011 an Android engineer fixed this issue for the most part. The attributes that were ignored in XML now work, with the exception of repeatCount and fillEnabled which are still ignored (on purpose for some reason). This means it still isn't easy to repeat an AnimationSet unfortunately.

For details please see the overview in the updated docs (explains which attributes are ignored, which work, and which are passed onto children). And for a deeper understanding of what fillAfter, fillBefore, and fillEnabled actually do, see the engineer's (Chet Haase) blog post about it here.


Original Answer

To expand upon answers by Pavel and others: it is true that the <set> tag is ridiculously buggy. It can't deal correctly with repeatCount and a number of other attributes.

I spent a few hours figuring out what it can and can't deal with and have submitted a bug report/issue here: Issue 17662

In summary (this concerns AnimationSets):

setRepeatCount() / android:repeatCount

This attribute (as well as repeatMode) does not work in code or XML. This makes repeating an entire set of animations difficult.

setDuration() / android:duration

Setting this on an AnimationSet in code WORKS (overrides all durations of children animations), but not when included in the tag in XML

setFillAfter() / android:fillAfter

This works in both code and XML for the tag. Strangely I have gotten it to also work without the need to set fillEnabled to true.

setFillBefore() / android:fillBefore

Seems to have no effect/ignored in both code and XML

setFillEnabled() / android:fillEnabled

Seems to have no effect/ignored in both code and XML. I can still get fillAfter to work even without including fillEnabled or setting fillEnabled to false.

setStartOffset() / android:startOffset

This works only in code and not XML.

like image 50
Tony Chan Avatar answered Oct 08 '22 13:10

Tony Chan