16

RelativeLayout に右から左へ移動するアニメーションを使用しています。

のレイアウトの可視性を「GONE」に設定しようとしましたが、うまくいきonAnimationEnd()ません。アニメーション ビューは、停止した場所にまだ存在します。

これは私が使用したコードです:

右から左へのアニメーションの作成:

TranslateAnimation animate = new TranslateAnimation(0,-rlImages.getWidth()/2,0,0);
animate.setDuration(1000);
animate.setFillAfter(true); 

アニメーションをレイアウトに設定する:

centre_leftanimate.startAnimation(animate);

アニメーションへのリスナーの追加:

animate.setAnimationListener(new AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        // TODO Auto-generated method stub
        centre_leftanimate.setVisibility(View.GONE);   // I wants to make the visibility of view to gone,but this is not working                                                         
        half_left.setVisibility(View.VISIBLE);
    }
});

アニメーションの終了後にアニメーション ビューの可視性を非表示にする方法は?

提案してください。

4

6 に答える 6

1

必要に応じて、ビューの可視性を設定できます。アニメーションの開始直後に View.INVISIBLE に設定すると、アニメーションが表示され、アニメーションが停止するとすぐに View が消えます。コードの問題は、INVISIBLE の代わりに GONE を使用している可能性があると思います。2 番目の問題は、リスナーを設定する前にアニメーションを開始することかもしれませんが、私の解決策では、実際にはリスナーは必要ありません。また、FillAfter オプションを取り除きます。

 TranslateAnimation animate = new TranslateAnimation(0,-rlImages.getWidth()/2,0,0);
 animate.setDuration(1000);
 centre_leftanimate.startAnimation(animate);
 centre_leftanimate.setVisibility(View.INVISIBLE);
于 2013-10-30T12:08:49.490 に答える
0

私は同じ問題を抱えていましたが、この質問Android - remove View when its animation finishedの回答でこの問題を解決しました。

編集:あなたはそのようなことをすることができます:

final MenuActivity MN= MenuActivity.this;
    AFade.setAnimationListener(new Animation.AnimationListener(){
            @Override
            public void onAnimationStart(Animation arg0) {
            }           
            @Override
            public void onAnimationRepeat(Animation arg0) {
            }           
            @Override
            public void onAnimationEnd(Animation arg0) {
                LayoutMain.post(new Runnable() {
                    public void run () {
                        // it works without the runOnUiThread, but all UI updates must 
                        // be done on the UI thread
                        MN.runOnUiThread(new Runnable() {
                            public void run() {
                                LayoutMain.removeView(NextButton);
                            }
                        });
                    }
                });
            }
        });

LayoutMain は、ビューを含むレイアウトです。MNはあなたの活動です。

于 2016-04-14T07:56:13.767 に答える