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

并将侦听器设置为inFlipoutFlip- 然后它将起作用。

或者您可以在翻转视图时定义可运行,使用 postDelayed — 500 毫秒(这个时间在这个项目上设置,动画时间)。— 这个选项不是很好,不推荐。

编辑:

界面:

public interface FlipCompleteListener {

    public void flipOutComplete();

    public void flipInComplete();

}

在动画工厂类上:

   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() {
    }

这应该可以,但是使用静态侦听器——不好,需要将静态方法重构为对象方法。麻省理工学院许可下的项目,允许您这样做。

于 2013-10-15T14:02:27.197 回答