我正在使用overridePendingTransition
方法来执行自定义活动动画。
我想知道动画何时结束(回调/听众)。
有没有直接的方法来实现这一点,如果没有,请建议我一些解决方法。
答案 0 :(得分:13)
我使用此方法启动任何动画(动画XML的resID)。 如果nextPuzzleOnEnd为true,则在动画结束时调用方法“nextPuzzle”。
该方法是我的puzzle-apps的一部分,我用它来显示任何成功的动画,然后(在anim完成之后)继续下一个谜题。
/*
* start animation (any view)
*/
private void startAnimation(View v, int resId, Boolean nextPuzzleOnEnd){
Animation anim;
if(v!=null){ // can be null, after change of orientation
anim = AnimationUtils.loadAnimation(this.getContext(),resId);
anim.setFillAfter(false);
v.setAnimation(anim);
if( nextPuzzleOnEnd ){
anim.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation anim)
{
};
public void onAnimationRepeat(Animation anim)
{
};
public void onAnimationEnd(Animation anim)
{
nextPuzzle();
};
});
}
v.startAnimation(anim);
}
}
答案 1 :(得分:8)
overridePendingTransition
没有听众。就像我写了一篇早先的帖子一样,你宁愿使用普通的动画代替overridePendingTransition
(仅适用于Android 2.0及以上版本)。
你可以获得类似的效果,你也可以用普通的动画做更酷的事情。我之前的帖子是Load XML slowly
答案 2 :(得分:6)
在浏览Google以获取此问题失败后,我通过遍历所有覆盖方法找到了解决方案。
所以我所做的就是在进入屏幕的活动中重写此方法:
@Override
public void onEnterAnimationComplete() {
super.onEnterAnimationComplete();
}
答案 3 :(得分:1)
@Hambug解决方案很好。但是有问题。 onEnterAnimationComplete将可用于棒棒糖及更高版本的API(21)。
@Override
public void onEnterAnimationComplete() {
super.onEnterAnimationComplete();
//write code here.
}
无论您用上述方法编写的什么代码,都不会在prelolipop设备上执行。因此,您应该进行版本检查并根据需要编写它,例如在onCreate中。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){
//write code here.
}