首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为ObjectAnimator设置AnimationListener

为ObjectAnimator设置AnimationListener
EN

Stack Overflow用户
提问于 2016-07-14 23:12:14
回答 3查看 5.7K关注 0票数 7

在我的程序中,我有一个从左到右移动ImageView的ObjectAnimator。我正在尝试设置一个侦听器,该侦听器将在ObjectAnimator运行完毕时执行一个任务。下面是我目前正在使用的代码的相关部分,试图实现这一点:

代码语言:javascript
复制
  if (num == 350) {
        nAnim = ObjectAnimator.ofFloat(gamePiece, "translationX", 0, num);
        nAnim.setDuration(2125);
        nAnim.start();
        nAnim.addListener(new AnimationListener() {
            @Override
            public void onAnimationEnd(Animator a) {
                startGame(level);
            }

            @Override
            public void onAnimationStart(Animator a) {

            }

            @Override
            public void onAnimationCancel(Animator a) {

            }

            @Override
            public void onAnimationRepeat(Animator a) {

            }

        });

当我试图在Android Studio中运行这段代码时,我得到了一个错误: MainActivity不是抽象的,并且没有覆盖MainActivity中的抽象方法onAnimationStart()。我必须怎么做才能修复这个错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-14 23:23:37

由于您在MainActivity中实现了AnimatorListener,因此必须包含它的所有抽象方法,并将nAnim.addListener(new Animat....更改为nAnim.addListener(this)

代码语言:javascript
复制
@Override
public void onAnimationStart(Animator animation){
}

@Override
public void onAnimationEnd(Animator animation){
    startGame(level)
}

@Override
public void onAnimationRepeat(Animator animation){
}

@Override
public void onAnimationCancel(Animator animation){
}
票数 8
EN

Stack Overflow用户

发布于 2019-06-22 19:42:03

您应该使用AnimatorListener类而不是AnimationListener,如下所示

代码语言:javascript
复制
nAnim.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animator) {

        }

        @Override
        public void onAnimationEnd(Animator animator) {

        }

        @Override
        public void onAnimationCancel(Animator animator) {

        }

        @Override
        public void onAnimationRepeat(Animator animator) {

        }


    });
票数 1
EN

Stack Overflow用户

发布于 2021-01-30 12:29:32

或者切换到Kotlin并将animator.start()放在最后一行。当然,你不必实现所有的动画方法

代码语言:javascript
复制
  val gamePiece = Button(this)
    var num = 0
    val animator = ObjectAnimator.ofFloat(gamePiece, View.TRANSLATION_X, 0f, num.toFloat())
    animator.duration = 2125

    if (num ==350){

        animator.addListener(object : AnimatorListenerAdapter(){


          override fun onAnimationStart(animation: Animator?) {
                super.onAnimationStart(animation)
            }

            override fun onAnimationEnd(animation: Animator?) {
                super.onAnimationEnd(animation)
                startGame(level)
            }
        })
    }
    //animator.start() should be the last line
    animator.start()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38377936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档