現在、TranslateAnimationを使用してボタンの位置をアニメーション化しようとしています。実際のボタンを動かす方法とドローアブルを動かす方法は、アニメーションの後でレイアウトを変更することであると、私は複数の場所で読みました。私はそれをしました、しかし私は2つの問題/解決策に遭遇しました:
setFillAfter(true)を追加します。これは、ドローアブルがアニメーション後も存続するため便利ですが、レイアウトが変更されると、ドローアブルは移動距離によって本来あるべき位置からオフセットされ、ボタンの空白のフレームが本来あるべき位置になります。
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 );