首页 > 解决方案 > 如何从屏幕的右到左和从左到右为图像设置动画

问题描述

我试图弄清楚如何从左到右为图像设置动画,然后从右到左。

例如想象下图:

在此处输入图像描述

在全分辨率下,图像的宽度将超过屏幕的宽度。所以最初,只有图像的左侧应该是可见的,但是随着动画的运行,右侧会慢慢变得可见,例如:

在此处输入图像描述

一旦图像的右侧完全露出,动画就会反向开始:

在此处输入图像描述

任何想法如何实现这一目标?
Android API 或任何技术都会有很大帮助。

标签: android

解决方案


使用ObjectAnimator.

好吧,我真的不知道如何在不裁剪的情况下调整图像大小,所以我将视图的宽度设置为 1000dp。

这是解决方案:

        ImageView imageView = findViewById(R.id.imageView);
        imageView.post(() -> {
            Point point = new Point();
            getWindowManager().getDefaultDisplay().getSize(point);
            float width = imageView.getMeasuredWidth();
            ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView, "translationX", 0, -(width - point.x));
            objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
            objectAnimator.setRepeatCount(ValueAnimator.INFINITE);
            objectAnimator.setDuration(10000);
            objectAnimator.start();
        });

让我解释。首先,我得到设备的大小。

Point point = new Point();
getWindowManager().getDefaultDisplay().getSize(point);

然后,我得到视图宽度并创建 ObjectAnimator

float width = imageView.getMeasuredWidth();
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView, "translationX", 0, -(width - point.x));

第一个参数是一个视图,它将被动画化。第二个参数告诉 objectAnimator 使用什么方法(在本例中为 setter)。我们使用translationX,所以objectAnimator使用setTranslationX()。所有其他参数告诉 objectAnimator 从哪里到哪里应该动画。

当显示图像的边缘时,我们会停止动画的point.x减法。width否则,imageView 将向左滑动直到图像消失。

例如:

ObjectAnimator.ofFloat(imageView, "translationX", 0, 200, 100, 300);

表示图像应该通过 X 轴到达该点0,然后200,然后100,最后300

objectAnimator.setRepeatMode(ValueAnimator.REVERSE);

告诉动画完成后,再做一次,但相反。

objectAnimator.setRepeatCount(ValueAnimator.INFINITE);

告诉动画必须无限重复。

objectAnimator.setDuration(10000);

动画的持续时间(以毫秒为单位)。


推荐阅读