6

2 つのアニメーションのセットがあり、両方のアニメーションがオーバーシュート インターポレーターを使用して一緒に実行されます。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/overshoot_interpolator" >

    <translate
        android:duration="6000"
        android:fromXDelta="100%" android:toXDelta="0%" />

    <scale
        android:duration="6000"
        android:fromXScale="1.0" android:toXScale="0.6"
        android:pivotX="0"
        android:fromYScale="1.0" android:toYScale="1.0"
        android:repeatCount="1"
        android:repeatMode="reverse" />
</set>

translateアニメーションをオーバーシュートさせ、scaleアニメーションを加速させたい。
私はこれをやろうとしましたが、うまくいきません:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:interpolator="@android:anim/overshoot_interpolator"
        android:duration="6000"
        android:fromXDelta="100%" android:toXDelta="0%" />

    <scale
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="6000"
        android:fromXScale="1.0" android:toXScale="0.6"
        android:pivotX="0"
        android:fromYScale="1.0" android:toYScale="1.0"
        android:repeatCount="1"
        android:repeatMode="reverse" />
</set>

1 つのオブジェクトで実行されるすべてのアニメーションに対して、一度にアクティブにできるインターポレータは 1 つだけのようです。

4

3 に答える 3

15

これはあくまでも推測作業です。AnimationSetのコンストラクターの 1 つ、つまりshareInterpolatorが引数を取ることができることを覚えています。

パラメータの名前から判断すると、これはおそらく false に設定する必要があります。現在、デフォルトの「値」を使用しているはずです。アニメーションごとに異なるインターポレーターを指定しましたが、アニメーションには異なるインターポレーターがないため、このデフォルト値はおそらく真です。

確認するために、AnimationSet のソース コードには、(xml から) shareInterpolator の値を割り当てる次の行があります。

setFlag(PROPERTY_SHARE_INTERPOLATOR_MASK, 
        a.getBoolean(com.android.internal.R.styleable.AnimationSet_shareInterpolator
             , true));

これは明らかに、このブール値が指定されていない場合、デフォルトで true になることを意味します。


解決

あなたの問題を解決するには、この「R.styleable.AnimationSet_shareInterpolator」を使用して指定する必要があると思います。これは単に要素に追加することを意味 しますandroid:shareInterpolator="false" <set>

于 2013-04-10T07:09:14.240 に答える
3

アニメーションを分割し、1 つを画像ビューを含む に ImageView配置し、もう1 つを に配置しました。RelativeLayout

翻訳者

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
            android:interpolator="@android:anim/overshoot_interpolator"
            android:duration="6000"
            android:fromXDelta="100%" android:toXDelta="0%" />

</set>

スケーラー

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <scale
            android:interpolator="@android:anim/accelerate_interpolator"
            android:duration="6000"
            android:fromXScale="1.0" android:toXScale="0.6"
            android:pivotX="0"
            android:fromYScale="1.0" android:toYScale="1.0"
            android:repeatCount="1"
            android:repeatMode="reverse" />
</set>

xml

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:id="@+id/previousItem"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentLeft="true"
                    android:onClick="goToPreviousItem"
                    android:layout_margin="@dimen/float_from_edges"
                    android:layout_width="wrap_content"
            >
        <ImageView android:id="@+id/previousItemArrow"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:background="@drawable/arrow_left"
                />
    </RelativeLayout>

そして、それを扇動するソースコード:

RelativeLayout previousItemButton = (RelativeLayout)findViewById(R.id.previousItem);
    ImageView myButton = (ImageView)findViewById(R.id.previousItemArrow);
    Animation translator =
            AnimationUtils.loadAnimation(this, R.anim.translator);
    myButton.startAnimation(translator);

    Animation scalor =
            AnimationUtils.loadAnimation(this, R.anim.scalor);
    previousItemButton.startAnimation(scalor);

私はそれがかなり良いと思った。どのような効果を期待していたのかわかりません。

于 2013-04-10T02:34:25.120 に答える
1
This xml works with both interpolators check this


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
        android:shareInterpolator="false">

    <translate
        android:interpolator="@android:anim/overshoot_interpolator"
        android:fromXDelta="100%" android:toXDelta="0%"
        android:duration="500" />

    <scale
        android:interpolator="@android:anim/accelerate_interpolator"
        android:fromXScale="1.0" android:toXScale="0.6"
        android:pivotX="0"
        android:fromYScale="1.0" android:toYScale="1.0"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:startOffset="500"
        android:duration="1000" />
</set>
于 2013-04-16T12:11:28.143 に答える