2

ビューを非表示にして親レイアウトから削除するいくつかの方法を試しました。

  1. アルファ フェード アニメーションを呼び出し、続いて setVisibility(GONE) を呼び出します。
  2. アルファ フェード アニメーションを呼び出し、続いて AnimationListener 内で setVisibility(GONE) を呼び出します。
  3. アルファ フェード アニメーションを呼び出した後、AnimationListener 内の親レイアウトを削除します。

そのたびに、結果のアニメーションは失敗します --- ビューが画面から 2 回消えます。アルファ フェード アニメーションは正常に機能しますが、可視性を変更したり、親ビューから削除したりすると、2 回目に消える前にすぐに再び表示されます。その結果、予想外のぎくしゃくしたアニメーションが発生します。

コード例:

Animation animation = AnimationUtils.loadAnimation(AddTaskActivity.this,
            R.anim.fade_out);
final LinearLayout parentView = (LinearLayout) findViewById(R.id.addtask_root);
animation.setAnimationListener(new Animation.AnimationListener() {

    @Override
    public void onAnimationEnd(Animation animation) {
    parentView.post(new Runnable() {
            public void run() {
                        parentView.removeView(test);
                }
    });
    }

そのアニメーションは失敗します --- テスト ビューがビューから 2 回消えます。

何か案は?

4

1 に答える 1

0

ビューを削除する前にビューを透明にしたり、可視性を変更したりすると、やりたいことができると思います :

@Override
    public void onAnimationEnd(Animation animation) {
    parentView.post(new Runnable() {
            public void run() {
                        // transparent your view
                        ...     
                        parentView.removeView(test);
                }
    });

編集:

アニメーションについてのアンドロイドのドキュメントを見ましたが、次のように書かれています:

ビュー アニメーション システムのもう 1 つの欠点は、実際のビュー自体ではなく、ビューが描画された場所のみを変更することです。たとえば、画面上を移動するようにボタンをアニメーション化した場合、ボタンは正しく描画されますが、ボタンをクリックできる実際の場所は変わらないため、これを処理する独自のロジックを実装する必要があります。

プロパティ アニメーション システムを使用すると、これらの制約が完全に取り除かれ、任意のオブジェクト (ビューおよび非ビュー) の任意のプロパティをアニメーション化でき、オブジェクト自体が実際に変更されます。プロパティ アニメーション システムは、アニメーションの実行方法においてもより堅牢です。大まかに言えば、アニメーション化するプロパティ (色、位置、サイズなど) にアニメーターを割り当て、複数のアニメーターの補間や同期などのアニメーションの側面を定義できます。

だから私はあなたが使用しなければならないと思いますproperty animation

于 2012-08-10T01:40:57.827 に答える