我正在利用这个项目(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}
});
任何指针?
答案 0 :(得分:2)
你需要创建界面,并覆盖方法:
public static Animation[] flipAnimation
并将侦听器设置为inFlip
或outFlip
- 然后就可以了。
或者您可以在翻转视图时定义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许可下的项目,允许您这样做。