我有一个相对布局的ImageView。我正在使用Timer将ImageView从屏幕顶部移动到底部。以下是计时器的代码
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
被称为潜艇。动画效果很好但是当我在同一个TexViews
中更改某些RelativeLayout
的值时,ImageView
的位置会重置为原始位置。我也尝试过使用Android的View
动画但结果是一样的。有没有办法避免重置潜艇ImageView
并保持其改变位置?
答案 0 :(得分:0)
这是android动画的经典行为。您必须指定动画结束时要执行的操作,否则它将返回初始状态。
这是一个可以帮助您解决的问题:Android: Animation Position Resets After Complete
答案 1 :(得分:0)
我正在使用一个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方法,否则当动画结束时视图会闪烁。