android - 动画期间 ImageView 上的 OnTouchListener,有时不会触发/调用

标签 android android-layout imageview android-animation

我有

  1. 布局游戏(相对布局)
  2. ImageView(播放器)
  3. ViewPropertyAnimator(动画)

我的代码是:

final Vibrator vibe = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE);
    final ImageView playerImageView = (ImageView) layoutInflater.inflate(R.layout.player, null);
        playerImageView.setLayoutParams(new RelativeLayout.LayoutParams(playerSizeX, playerSizeY));
        playerImageView.setImageDrawable(playerDrawable);
        playerImageView.setX(playerVisualPositionX);
        playerImageView.setY(playerVisualPositionY);
        playerImageView.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                    vibe.vibrate(100);
                    touchedPlayer();
                }

                return true;
            }
        });

        layoutGame.addView(playerImageView);
        ViewPropertyAnimator viewPropertyAnimator = playerImageView.animate();
        viewPropertyAnimator.x(positionAnimateX); // The view will be animated such that it moves to positionAnimateX.
        viewPropertyAnimator.y(positionAnimateY); // The view will be animated such that it moves to positionAnimateY.
        viewPropertyAnimator.setDuration(animationTime);
        viewPropertyAnimator.setListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                //super.onAnimationEnd(animation);
                layoutGame.removeView(playerImageView);

                if (!gameOver && !gamePaused) {
                    addNewPlayer();
                }
            }

            @Override
            public void onAnimationStart(Animator animation) {
                //super.onAnimationStart(animation);
                currentAnimation = animation;
            }
        });

有时我会触摸播放器,但在动画期间不会调用/触发 ImageView 上的 onClicListener 方法 touchedPlayer()。你知道它是什么吗?

最佳答案

尝试使用 ObjectAnimator 为您的 View 设置 XY 的动画,我从来没有遇到过这样的问题,我经常使用它与您在这里所做的类似的事情。

试试这个,看看它是否有效:

    layoutGame.addView(playerImageView);
    PropertyValuesHolder xHolder = PropertyValuesHolder.ofFloat("X", playerImageView.getX(), positionAnimateX); // The view will be animated such that it moves to positionAnimateX.
    PropertyValuesHolder yHolder = PropertyValuesHolder.ofFloat("Y", playerImageView.getY(), positionAnimateY); // The view will be animated such that it moves to positionAnimateY.
    ValueAnimator valueAnimator = ObjectAnimator.ofPropertyValuesHolder(playerImageView, xHolder, yHolder);
    valueAnimator.setDuration(animationTime);
    valueAnimator.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {
            //super.onAnimationStart(animation);
            currentAnimation = animation;
        }

        @Override
        public void onAnimationEnd(Animator animation) {
            //super.onAnimationEnd(animation);
            layoutGame.removeView(playerImageView);

            if (!gameOver && !gamePaused) {
                addNewPlayer();
            }
        }

        @Override
        public void onAnimationCancel(Animator animation) {

        }

        @Override
        public void onAnimationRepeat(Animator animation) {

        }
    });
    valueAnimator.start();

关于android - 动画期间 ImageView 上的 OnTouchListener,有时不会触发/调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40544790/

相关文章:

android - 在 Android 应用程序开发中使用图像

Android:TextView 出现奇怪的文本换行问题

java - Android 中的 Activity 到 Fragment 通信

ios - 水平和垂直重复图像

android - ListView 滚动错误

android - 如何为 Android API 级别 <11 实现 CursorLoader

iphone - Android 或 iPhone 上的应用内导览/教程/演练的好例子

android - 未应用自定义 SearchView 样式

java - 如何检查 ImageView 是否有从 Android Studio 中的图库上传的图像?

java - 在 ListView 中显示来自服务器的文本和图像