web-dev-qa-db-ja.com

単一のObjectAnimatorで複数のプロパティを変更しますか?

コーディングが必要なかなり複雑なアニメーションがあり、次のような一連のObjectAnimatorを使用しています。

ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(view, TRANSLATION_X, value).setDuration(BASE_DURATION * 2);
ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(view, TRANSLATION_Y, value).setDuration(BASE_DURATION * 2);

XとYの翻訳を同じObjectAnimatorにグループ化して、それらをまとめて作成し、それらをすべてAnimatorSetに追加することはできますか?

ありがとう!

23
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat(TRANSLATION_X, value);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat(TRANSLATION_Y, value);
ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY);
animator.setDuration(BASE_DURATION * 2);
animator.start();

http://developer.Android.com/guide/topics/graphics/prop-animation.html#views 1つのObjectAnimator

57
Hugo

AnimationSetを使用する必要があると思います。それは実際にあなたが望むことを行い、私がPropertyValuesHolderを考えるとき、私はKeyframesを考えないのでそれを行う素晴らしい方法です。

そうそう:

ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(view, TRANSLATION_X, value);
ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(view, TRANSLATION_Y, value);

AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(objectAnimator1, objectAnimator2);
animatorSet.setDuration(BASE_DURATION * 2);

animatorSet.start();

ObjectAnimatorsはいくつでも追加できます。

オブジェクトのアニメーションに複数のプロパティを追加するために使用したもう1つの方法は、コードとXMLの組み合わせを使用してアニメーションを定義することです。これはこれに基づいています ドキュメント

たとえば、XMLでは、静的な値を持つ単一のオブジェクトのAnimatorSetsとObjectAnimatorsをセットアップし、変更の連続シーケンスを定義できます(res/animator/moveout.xml)。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:ordering="sequentially">
    <set>
        <objectAnimator
            Android:propertyName="scaleX"
            Android:duration="2000"
            Android:valueTo="0.8"
            Android:interpolator="@Android:anim/decelerate_interpolator"/>
        <objectAnimator
            Android:propertyName="scaleY"
            Android:duration="2000"
            Android:valueTo="0.8"
            Android:interpolator="@Android:anim/decelerate_interpolator"/>
        <objectAnimator
            Android:propertyName="alpha"
            Android:duration="2000"
            Android:valueTo="0"
            Android:interpolator="@Android:anim/decelerate_interpolator"/>
    </set>
    <set>
        <objectAnimator
            Android:propertyName="scaleX"
            Android:duration="2000"
            Android:valueTo="1.2"
            Android:interpolator="@Android:anim/accelerate_interpolator"/>
        <objectAnimator
            Android:propertyName="scaleY"
            Android:duration="2000"
            Android:valueTo="1.2"
            Android:interpolator="@Android:anim/accelerate_interpolator"/>
        <objectAnimator
            Android:propertyName="alpha"
            Android:duration="2000"
            Android:valueTo="1"
            Android:interpolator="@Android:anim/accelerate_interpolator"/>
    </set>
</set>

次に、実行時にこれらのAnimatorSets/ObjectAnimatorsをロードして、動的に生成された値で値を変更できます。

    AnimatorSet firstSet = (AnimatorSet) AnimatorInflater.loadAnimator(this,
            R.animator.moveout);

    AnimatorSet secondSet = firstSet.clone();
    firstSet.setTarget(button);
    secondSet.setTarget(anotherButton);

    // Choreograph the animations
    // Change the duration of all child elements in the set
    firstSet.setDuration(1000);
    secondSet.setDuration(200);

    // Set start delay so second set plays after the first set
    secondSet.setStartDelay(2000);
    AnimatorSet anim = new AnimatorSet();
    anim.playTogether(firstSet,secondSet);
    anim.start();
4
brif

(例が示すように)ビューをアニメーション化する場合は、ViewPropertyAnimatorを使用できます。

view.animate().translationX(value_x).translationY(value_y).setDuration(duration).start();
3
Quanturium

ビューのアニメーションはさらに簡単になります。

v.animate().x(valueX).y(valueY).setDuration(500).start();

(このスニペットでは、ViewPropertyAnimatorが使用されています)。

2
Andrey