AnimationFactory FlipTransition - 动画监听器?

时间:2013-10-15 13:32:12

标签: android android-animation

我正在利用这个项目(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} 

});

任何指针?

1 个答案:

答案 0 :(得分:2)

你需要创建界面,并覆盖方法:

public static Animation[] flipAnimation

并将侦听器设置为inFlipoutFlip - 然后就可以了。

或者您可以在翻转视图时定义runnable,使用postDelayed - 500 ms(此时设置此项目,动画时间)。 - 此选项非常好,不推荐。

编辑:

接口:

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许可下的项目,允许您这样做。