将动画侦听器设置为“活动”动画

时间:2010-08-02 08:23:52

标签: android animation android-activity

我正在使用overridePendingTransition方法来执行自定义活动动画。

我想知道动画何时结束(回调/听众)。

有没有直接的方法来实现这一点,如果没有,请建议我一些解决方法。

4 个答案:

答案 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.
    }