0

このプロジェクト ( https://code.google.com/p/android-3d-flip-view-transition/ ) を利用して、Android アプリでカードをめくっています。

以下は、カードを裏返すために使用するコードです。

AnimationFactory.flipTransition((ViewAnimator) v,FlipDirection.LEFT_RIGHT);

アニメーションが完成したかどうかはどうすればわかりますか? 以下のコードでアニメーション完了のリスナーをアタッチしようとしましたが、NullPointerException がスローされます。

((ViewAnimator) v).getAnimation().setAnimationListener(new AnimationListener() {

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

 @Override
 public void onAnimationRepeat(Animation animation) {}

 @Override
 public void onAnimationEnd(Animation animation) {//do something} 

});

ポインタはありますか?

4

1 に答える 1

2

インターフェイスを作成し、メソッドをオーバーライドする必要があります。

public static Animation[] flipAnimation

リスナーをinFliporに設定outFlipすると、機能します。

または、postDelayed — 500 ミリ秒 (今回はこのプロジェクトで設定されたアニメーション時間) を使用して、ビューを反転するときに実行可能を定義することもできます。— このオプションはあまり良くないので、お勧めしません。

編集:

インターフェース:

public interface FlipCompleteListener {

    public void flipOutComplete();

    public void flipInComplete();

}

クラス AnimationFactory:

   private static FlipCompleteListener flipCompleteListener;

   public static void setFlipCompleteListener(FlipCompleteListener flipCompleteListener) {
        AnimationFactory.flipCompleteListener = flipCompleteListener;
    }

メソッド FlipAnimation で:

outFlip.setAnimationListener(new AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
             if(flipCompleteListener != null) {

             flipCompleteListener.flipOutComplete();

            }
        }

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

作成時のように、クラスで:

... extends Activity implements FlipCompleteListener

 @Override
    public void onCreate(Bundle savedInstanceState) {
        AnimationFactory.setFlipCompleteListener(this);
    ...

最後に、必要なメソッドを取得しました。

    @Override
    public void flipOutComplete() {
    }

    @Override
    public void flipInComplete() {
    }

これは機能するはずですが、静的リスナーを使用します — 悪い、静的メソッドをオブジェクト メソッドにリファクタリングする必要があります。あなたができるようにするMITライセンスの下のプロジェクト。

于 2013-10-15T14:02:27.197 に答える