0

ビューにアニメーションを適用し、AnimationListener を介してアニメーションが終了したときに表示したいと考えています。私のコードはデバイス 4.x では機能しますが、2.3.3 デバイスでは機能しません。onAnimationStart メソッドと onAnimationEnd メソッドは呼び出されません。

 final Animation toTopAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.move_up);
 toTopAnimation.setDuration(250);
 toTopAnimation.setFillBefore(true);
 toTopAnimation.setFillAfter(true);

 toTopAnimation.setAnimationListener(new AnimationListener() {
     @Override
     public void onAnimationStart(Animation animation) {
          Log.i("log", "onAnimationStart");
     }
     @Override
     public void onAnimationEnd(Animation animation) {
         Log.i("log", "onAnimationEnd");
         mQuickReturnView.setVisibility (View.VISIBLE);
     }

     @Override
     public void onAnimationRepeat(Animation animation) {
     }
 });

  mQuickReturnView.setAnimation(toTopAnimation);
  mQuickReturnView.startAnimation(toTopAnimation);

何か間違っていることがわかりますか?

ありがとう

4

1 に答える 1

0

同様の問題があり、なんとか解決しました。この問題の背後にある理由はまだよくわかりませんが、ビューのコンテンツとジンジャーブレッドがその描画を処理する方法のどこかに横たわっています。

私の場合、RelativeLayoutいくつかのビューが含まれていました。アニメーションは、アニメーションを呼び出す前に RelativeLayout の子ビューの値を変更した場合にのみ機能します。たとえば、TextView内部があったので、setText()メソッドを呼び出します。多分あなたも試してみるべきです:

// ---
mQuickReturnView.setAnimation(toTopAnimation);
someViewInsidemQuickReturnView.setText(getResources().getString(R.string.some_string));
mQuickReturnView.startAnimation(toTopAnimation);
// ---

setText()メソッドは何らかの方法でビューを更新し、その後アニメーションは正常に機能します。

于 2013-06-25T17:08:14.143 に答える