我最近一直在四处寻找动态设置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始终设置为单击它的位置。
答案 0 :(得分:0)
首先,有些事情在你的代码中没有意义。 这一行:
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()时再次让它掉线。