Android ImageView在另一个视图在RelativeLayout中更改后重置位置
我有一个位于相对布局中的ImageView。我正在使用计时器将ImageView从屏幕顶部移动到底部。下面是计时器的代码Android ImageView在另一个视图在RelativeLayout中更改后重置位置,android,android-relativelayout,android-imageview,android-animation,Android,Android Relativelayout,Android Imageview,Android Animation,我有一个位于相对布局中的ImageView。我正在使用计时器将ImageView从屏幕顶部移动到底部。下面是计时器的代码 timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { public void run() { ObjectAnimator ani
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
ObjectAnimator anim= ObjectAnimator.ofFloat(submarine, "translationY", submarine.getTop(), submarine.getTop()+50);
anim.setDuration(1000);
submarine.setTop(submarine.getTop()+50);
submarine.setBottom(submarine.getBottom()+50);
//submarine.startAnimation(sub_down);
anim.start();
}
});
}
}, 0, 3000);
ImageView
称为潜艇。动画效果很好,但是当我在相同的RelativeLayout
中更改某些TexViews
的值时,ImageView
的位置将重置为其原始位置。我也尝试过使用Android的视图
动画,但结果是一样的。有没有办法避免重置潜艇的图像视图,并保持其改变的位置?这是安卓动画的经典行为。必须指定动画结束时要执行的操作,否则动画将返回初始状态
这里有一个可以帮助您解决的问题:我正在使用一个objectanimator,它应该在动画结束时保持对象的位置。唯一有效的方法是在动画结束时设置视图的边距,如下面的代码所示:
@Override
public void onAnimationEnd(Animation animation) {
runOnUiThread(new Runnable() {
public void run() {
submarine.clearAnimation();
LayoutParams lp = new LayoutParams(submarine.getWidth(), submarine.getHeight());
lp.setMargins(submarine.getLeft(), submarine.getTop()+50, 0, 0);
submarine.setLayoutParams(lp);
}
});
如果您尝试使用setTop和setLeft定位项目,视图将重置为其原始位置。另一个注意事项是,在定位视图之前,需要运行视图的clearAnimation方法,否则当动画结束时,视图将闪烁