android - 如何从屏幕的右到左和从左到右为图像设置动画
问题描述
我试图弄清楚如何从左到右为图像设置动画,然后从右到左。
例如想象下图:
在全分辨率下,图像的宽度将超过屏幕的宽度。所以最初,只有图像的左侧应该是可见的,但是随着动画的运行,右侧会慢慢变得可见,例如:
一旦图像的右侧完全露出,动画就会反向开始:
任何想法如何实现这一目标?
Android API 或任何技术都会有很大帮助。
解决方案
使用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);
动画的持续时间(以毫秒为单位)。
推荐阅读
- c# - 玩家移动其他物体 Unity 2D
- python - 如何在使用 CountVectorizer 制作训练数据集时修复“numpy.ndarray”错误?
- apache-spark - 如何停止在函数内部创建的 SparkContext?
- java - 如何使用 1:n 关系将数据批量插入到两个表中?
- python-3.x - 使用 Pandas (Python) 更改单元格值
- c# - 允许用户选择要使用的代码实现
- c# - Backgroundworker progresschanged 事件 c#
- ios - 重用段控件
- apache-camel - Camel-Bindy (2.21.2) 固定长度解组似乎忽略了 trim=true 注释
- aws-sam - 如何获取给定已部署资源的资源 ID?