我有一张要制作动画的图片,然后移到另一个ImageView位置。
目前这是我正在做的事情:
v.animate()
.scaleX(??)
.scaleY(??)
.x(target.x)
.y(target.y)
.setDuration(1000)
.start()
我的问题是如何为x和y计算正确的比例因子?如果我将布局参数设置为与目标的布局参数相等,则它可以正常工作,但不会设置动画。我已经尝试将源图像的宽度和高度与目标图像相除,但是它并没有给我正确的比例。
感谢您的帮助
答案 0 :(得分:0)
一个解决方案是通过getMeasuredWidth()和getMeasuredHeight()获得图像的实际宽度和高度,然后进行除法以计算比例因子。请注意,使用getWidth()和getHeight()不是一个好选择,因为它们包含有关宽度和高度的信息(例如MATCH_PARENT的整数值),而不是最终的计算值。另请注意,在布置用户界面后,可以使用和进行测量。如果必须在创建活动时完成动画,则必须在onWindowFocusChanged中触发它,这时已经计算了布局大小(如果我没记错的话)。
<b-table>
编辑
此外,我不确定缩放多少会影响ImageView中的图像质量。
答案 1 :(得分:0)
为两个图像之间的比率创建一个浮点值:
float w_ratio = (targetImage.getMeasuredWidth() - sourceImage.getMeasuredWidth()) / sourceImage.getMeasuredWidth();
float h_ratio = (targetImage.getMeasuredHeight() - sourceImage.getMeasuredHeight()) / sourceImage.getMeasuredHeight();
// then animate:
v.animate().scaleXBy(w_ratio).scaleYBy(h_ratio).setDuration(1000);
// Don't forget to reset the size later if needed, using:
v.setScaleX(1.0f);
v.setScaleY(1.0f);
答案 2 :(得分:0)
要获取目标imageView的x和y位置,请编写以下代码。
x = imageViewObject.getLeft();
y = imageViewObject.getTop();
要制作动画,您需要在代码中进行以下更改
v.animate()
.scaleX(0) // This will be your initial x position of your imageView
.scaleY(0) // This will be your initial y position of your imageView
.x(x) // This will be the x position of your target imageView
.y(y) // This will be the y position of your target imageView
.setDuration(1500)
.start()
最初,出于测试目的,请增加持续时间,以便您可以注意到动画并可以根据需要进行必要的更改。