0

現在、TranslateAnimationを使用してボタンの位置をアニメーション化しようとしています。実際のボタンを動かす方法とドローアブルを動かす方法は、アニメーションの後でレイアウトを変更することであると、私は複数の場所で読みました。私はそれをしました、しかし私は2つの問題/解決策に遭遇しました:

  1. setFillAfter(true)を追加します。これは、ドローアブルがアニメーション後も存続するため便利ですが、レイアウトが変更されると、ドローアブルは移動距離によって本来あるべき位置からオフセットされ、ボタンの空白のフレームが本来あるべき位置になります。

  2. setFillAfter(false)を追加します。これを行ってから、アニメーションが正常に機能した後にレイアウトを設定しますが、アイコンが点滅します。これは、アニメーションが終了してから新しいレイアウトパラメータで画面が更新されるまでの遅延であると考えられます。私は現在このコードを使用していますが、フラッシュは受け入れられないので、それを修正するための解決策を見つけたいと思います。

現在の私のコードは次のとおりです。

final View aniView = v;  // v is some view
TranslateAnimation ani = new TranslateAnimation(0, 
240 - v.getLeft() - v.getWidth() / 2, 
0, 
240 - v.getTop() - v.getHeight() / 2 );


ani.setDuration( 500 );

ani.setFillAfter( false );
ani.setAnimationListener( new AnimationListener() {
public void onAnimationEnd( Animation a ) {
        aniView.setTag( new Boolean( true ) );
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( aniView.getWidth(), 
    aniView.getHeight() );
    params.leftMargin = 240 - aniView.getWidth() / 2;
    params.topMargin = 240 - aniView.getHeight() / 2;

    aniView.setLayoutParams(params);
}
public void onAnimationStart( Animation a ) {}
public void onAnimationRepeat( Animation a ) {}
});
v.animationStart( ani );
4

2 に答える 2

3

私は自分の質問に対する解決策を見つけました。同じ問題に遭遇した人のためにコードを投稿します。基本的には、レイアウトパラメータを事前に設定し、基本的にアニメーションを逆にするという考え方です。アイデアは次のとおりです。

TranslateAnimation ani = new TranslateAnimation(v.getLeft() + v.getWidth() / 2 - 240 , 
                0, 
                v.getTop() + v.getHeight() / 2 - 240, 
                0);


        ani.setDuration( 500 );
        ani.setFillAfter( true );
        ani.setDuration( 1000 );
        ani.setFillAfter( true );
        ani.setAnimationListener( new AnimationListener() {
            public void onAnimationEnd( Animation a ) {
                aniView.setTag( new Boolean( true ) );
            }
            public void onAnimationStart( Animation a ) {}
            public void onAnimationRepeat( Animation a ) {}
        });

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( v.getWidth(), 
                v.getHeight() );
        params.leftMargin = 240 - aniView.getWidth() / 2;
        params.topMargin = 240 - aniView.getHeight() / 2;

        v.setLayoutParams(params);
        v.startAnimation( set );
于 2012-10-17T02:34:06.277 に答える
0

ピートからの素晴らしい答えを完成させて、完全なアクティビティレイアウト(アニメーションの最後で点滅)をアニメーション化しようとして同じ問題が発生しましたが、レイアウトパラメータの代わりにview.translateXを使用しました...そしてこのソリューションは私の場合。

于 2015-08-14T14:23:42.157 に答える