繁体   English   中英

Android单击使用动画的ImageView时动态重置ImageView位置

[英]Android Reset ImageView Location dynamically When Clicking on ImageView that uses Animation

最近,我一直在四处寻找有关在动画过程中单击Image时动态设置ImageView的x和y位置的信息,但很快出现了问题。 我的ImageView以XML开头,并具有使ImageView跌至屏幕底部的动画。

当用户单击它时,我希望ImageView现在转到布局的最顶部(屏幕顶部),然后我可以随机选择x位置。 基本上,这样它就可以保持在相同的位置开始并落在屏幕底部。 如果用户单击ImageView,则它会返回顶部,因此动画可以再次发生。

我有这样的动画:

ViewPropertyAnimator viewPropertyAnimator = myImageView.animate()
     .translationY(bottomOfScreen)
     .setInterpolator(new AccelerateInterpolator())
     .setInterpolator(new BounceInterpolator())
     .setDuration(1000);

我在myImageView的onClickListener中有这样的x和y集:

myImageView.setOnClickListener(new View.OnClickListener() {
    Random randomX = new Random();
    myImageView.setX(randomX.nextInt(500 - 0 + 1) + 0);
    myImageView.setY(-300);
}

x似乎可以将ImageView放在我想要的x上的任何位置。 但是,似乎是由于发生动画(将ImageView放到Layout的底部),当您单击ImageView时,y始终设置为单击它的位置。

首先,有些事情在您的代码中没有意义。 这行:

myImageView.setX(randomX.nextInt(500 - 0 + 1) + 0);

令人困惑,可以简化为

 myImageView.setX(randomX.nextInt(500 + 1));

这行:

myImageView.setY(-300);

表示您要放置y轴的ImageView -300,它不在屏幕上。 请记住,y = 0是屏幕的顶部。 当您只设置setX和setY时,它看起来也不酷。 视图消失,并在其他地方弹出。 你为什么不尝试这样的事情:

myImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Random randomX = new Random();

            myImageView.animate()
                    .translationX(randomX.nextInt(500 + 1))
                    .translationY(myImageView.getHeight())
                    .setInterpolator(new AccelerateDecelerateInterpolator())
                    .setDuration(500)
                    .setListener(new Animator.AnimatorListener() {
                        @Override
                        public void onAnimationStart(Animator animation) {

                        }

                        @Override
                        public void onAnimationEnd(Animator animation) {
                            myImageView.animate()
                                    .translationY(bottomOfScreen)
                                    .setInterpolator(new AccelerateInterpolator())
                                    .setInterpolator(new BounceInterpolator())
                                    .setDuration(1000);
                        }

                        @Override
                        public void onAnimationCancel(Animator animation) {

                        }

                        @Override
                        public void onAnimationRepeat(Animator animation) {

                        }
                    });
        }
    });

这将使View返回顶部动画,并等待动画完成,这要归功于AnimatorListener,然后在调用onAnimationEnd()时使其再次掉落。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM