0

私はハニーコンプ前のアニメーションについてよく読みましたが、その変更は描画内でのみ考慮されます。2.1 までのバージョンをサポートする必要があるため、これAnimatorもオプションではありません。

画面の右側に配置された 2 つのボタンを含む LinearLayout があります。一部のイベントでは、ビューから右のボタンをアニメーション化します。残念ながら、クリックセントは元の位置に登録されています。回避策として、 を追加しAnimationListener、ボタンの可視性をView.GONEon AnimationEnd に設定し、ボタンが再びアニメーション化されている場合は、それを元に戻しView.VISIBLEます。これは、可視性を適用するとアニメーション化されるレイアウトの醜いフラッシュにつながります。

アニメーション後にビューを追跡する別の方法はありますか? 含まれているレイアウト内でフラッシュが発生することなく、ビューを削除できますか (おそらく、ある種の doubleBuffering)?

編集: この用語Flashは、ビューが非常に短い期間その位置で消え、その後同じ位置に再び表示されることを意味します。onAnimation[Start|End]そのレイアウト内で何かを変更した場合に正確に発生します

4

1 に答える 1

1

「フラッシュ」とは、ビューが新しい場所にジャンプすることを意味しますか? それとも、アニメーション end の間の移行中に、ビューが一瞬元の位置に移動するバグのように見える何かがあるということですか?

いずれにせよ、これは同様のシナリオで私のために働いたサンプルコードです。もちろん、変更する必要があります。私はそれがあなたを助けることを願っています:

final int deltaXToMove=50;
TranslateAnimation translateAnimation=new TranslateAnimation(0,deltaXToMove,0,0);
int animationTime=1000;
translateAnimation.setDuration(animationTime);
translateAnimation.setFillEnabled(true);
translateAnimation.setFillAfter(true);
final Button b=(Button)findViewById(R.id.button);
translateAnimation.setAnimationListener(new AnimationListener()
  {
  @Override
  public void onAnimationEnd(Animation animation)
    {
    animation.setFillAfter(false);
    FrameLayout.LayoutParams par=(LayoutParams)b.getLayoutParams();
    par.leftMargin=deltaXToMove;
    b.setLayoutParams(par);
    }
...
b.startAnimation(translateAnimation);
于 2012-07-30T09:23:51.847 に答える