0

我有一个位于相对布局中的 ImageView。我正在使用计时器将 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,它的位置被重置为它的原始位置。我也尝试过使用ViewAndroid 的动画,但结果是一样的。有什么办法可以避免潜艇重置ImageView并保持其改变的位置?

4

2 回答 2

0

This is the classic behavior of android animation. You must specify what to do at the end of your animation or it will go back to the initial state.

Here a solved question which may help you: Android: Animation Position Resets After Complete

于 2013-06-04T15:18:56.810 回答
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 方法,否则动画结束时视图会闪烁。

于 2013-06-05T08:05:46.553 回答