1568


Viewに下記のようなアニメーションを実装しています。(translationYが 0 → 100 → 0 → -100 → 0
と変化するのを繰り返します)

[code]

    ObjectAnimator anim = ObjectAnimator.ofFloat(view, "translationY", 0, 100, 0, -100, 0);
    anim.setInterpolator(new LinearInterpolator());
    anim.setDuration(5000);
    anim.setRepeatCount(ObjectAnimator.INFINITE);
    anim.setRepeatMode(ObjectAnimator.RESTART);
    anim.start();
    
[/code]

できればアニメーションはなるべくXMLで指定したいのですが、このように5個の値を経由するアニメーションを`res/animator/`下のXMLで作成することはできますか？


CC BY-SA 3.0
2014-12-12T10:57:47.477
1548
2014-12-13T00:35:14.043
2014-12-13T00:35:14.043
30
450
question
android android-animation
3個以上の値を使うObjectAnimatorをXMLで書くことはできますか？


sequentially な set の中に複数の objectAnimator を含めることで実現可能ではあります。
ただ、以下サンプルを見ると分かると思いますが、非常に冗長です。自分だったら Java コードで済ませるかな、と思います。

(XML側：res/animator/y5.xml)

[code]

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
         android:ordering="sequentially">
        <objectAnimator
            android:interpolator="@android:anim/linear_interpolator"
            android:valueFrom="0" android:valueTo="100"
            android:valueType="floatType"
            android:propertyName="translationY"
            android:duration="1250" />
        <objectAnimator
            android:interpolator="@android:anim/linear_interpolator"
            android:valueTo="0"
            android:valueType="floatType"
            android:propertyName="translationY"
            android:duration="1250" />
        <objectAnimator
            android:interpolator="@android:anim/linear_interpolator"
            android:valueTo="-100"
            android:valueType="floatType"
            android:propertyName="translationY"
            android:duration="1250" />
        <objectAnimator
            android:interpolator="@android:anim/linear_interpolator"
            android:valueTo="0"
            android:valueType="floatType"
            android:propertyName="translationY"
            android:duration="1250" />
    </set>
    
[/code]

(Java側)

[code]

    Animator anim = AnimatorInflater.loadAnimator(this, R.animator.y5);
    anim.setTarget(view);
    anim.addListener(new AnimatorListener() {
        @Override public void onAnimationStart(Animator animation) { }
        @Override public void onAnimationRepeat(Animator animation) { }
        @Override public void onAnimationEnd(Animator animation) {
            animation.start();
        }
        @Override public void onAnimationCancel(Animator animation) { }
    });
    anim.start();
    
[/code]

XML側のsetにrepeatCountを設定することができないのと、 AnimatorにもまたrepeatCountを設定するメソッドが無いので、
自前でイベントを捕捉してループを実現しています。


CC BY-SA 3.0
2014-12-13T00:30:45.900
1568
2014-12-13T00:30:45.900
2140
1548
answer