Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ImageView在另一个视图在RelativeLayout中更改后重置位置_Android_Android Relativelayout_Android Imageview_Android Animation - Fatal编程技术网

Android ImageView在另一个视图在RelativeLayout中更改后重置位置

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

我有一个位于相对布局中的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
称为潜艇。动画效果很好,但是当我在相同的
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方法,否则当动画结束时,视图将闪烁