AlphaAnimationをaddしたAnimationSetにsetDurationすると一部機種でAnimationが動作しないことがありました。
「一部機種」とは手持ちで確認したXperia acro SO-02C(OS 2.3.4)とDIGNO ISW 11K(OS 2.3.5)の2機種です。2系全般かもしれません。
1.AnimationSetに対してsetDurationして動かない例
TranslateAnimationとAlphaAnimationをaddしたAnimationSetにsetDurationすると一部機種でアニメーションが表示されません。
TranslateAnimation move = new TranslateAnimation(0, 100, 0, 0);
AlphaAnimation alpha = new AlphaAnimation(0.f, 1.f);
AnimationSet set = new AnimationSet(false);
set.setDuration(1000);
set.addAnimation(move);
set.addAnimation(alpha);
view.startAnimation(set);
2.AnimationSetに対してsetDurationして動く例
TranslateAnimationとScaleAnimationをaddしたAnimationSetに対してsetDurationすると一部機種でもアニメーションが表示されます。
なのでAlphaAnimationをaddするのがアニメーションが表示されない原因の1つのようです。
TranslateAnimation move = new TranslateAnimation(0, 100, 0, 0);
ScaleAnimation scale = new ScaleAnimation(0.f, 1.f, 0.f, 1.f);
AnimationSet set = new AnimationSet(false);
set.setDuration(1000);
set.addAnimation(move);
set.addAnimation(scale);
view.startAnimation(set);
3.AnimationSetにAlphaAnimationをaddしても動く例
AlphaAnimationをaddした場合でも、AnimationSetではなく各Animationに対してsetDurationすれば一部機種でも正常に動きます。
TranslateAnimation move = new TranslateAnimation(0, 100, 0, 0);
move.setDuration(1000);
AlphaAnimation alpha = new AlphaAnimation(0.f, 1.f);
alpha.setDuration(1000);
AnimationSet set = new AnimationSet(false);
set.addAnimation(move);
set.addAnimation(alpha);
view.startAnimation(set);
考察
AnimationSetを使う場合は、AnimationSetではなく、addする各Animationに対してsetDurationすれば間違いなさそうです。
一部機種で動かないなんだこれ -> 直したら動いた -> 他の手持ち機種でも問題ないー、というレベルの結論を書き留めてみましたメモ。