1

アニメーションで翻訳した後、ビューをそのままにしておく必要があるという問題を何度も見てきました。修正は簡単です。fillAfter="true" と fillEnabled="true" を XML に追加するだけです。

これは機能し、ビューはアニメーションの後もそのまま残ります。ただし、アニメーションを再度呼び出すと、ビューは元のポイントにリセットされ、単に同じ場所に移動します。

たとえば、ビューが (0,0) にあり、ボタンをクリックしてこのアニメーションを呼び出すとします。

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

    <translate
        android:duration="100"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="20"
        android:toYDelta="20" >
    </translate>
</set>

期待どおり (0,0) から (20,20) に移動します。ただし、もう一度ボタンを押して同じアニメーションを呼び出すと、魔法のように (0,0) に戻り、(20,20) に変換されます。

同じ翻訳を行いたいが、新しいスポットから発信したい場合はどうすればよいですか? ボタンを 1 回押すと、(0,0) から (20,20) になります。もう一度ヒットすると、(40,40)、(60,60) などになります。

XML でそれを行う簡単な方法はありますか、またはモーションごとに常に更新される変数 (START_LOCATION など) を作成する必要がありますか?

その時点で、これを Java で問題なく実行し、XML を忘れることは理にかなっているでしょうか? XML が Java に比べてどれだけコンパクトでシンプルかという点は、実際には非常に気に入っていますが、必要に応じてしぶしぶ切り替えます。

編集私はちょうど賢い考えを持っていて、fromXDelta="0" (そして YDelta も同様) を削除しました。結局のところ、それは「デルタ」であり、起源に関係なく「変化」を意味することは誰もが知っています. しかし、それは何もしませんでした。悲しい顔。

4

1 に答える 1

1

したがって、View通常のビュー アニメーションを使用して をアニメーション化すると、描画される位置だけをアニメーション化することになります。レイアウト内の実際の位置には影響しません。位置を永続的に変更する場合は、アニメーションの完了後Viewに のレイアウト パラメータを更新して、View作成した動きとアニメーションを一致させる必要があります。

于 2013-07-01T05:43:58.257 に答える