调整ImageView的动画大小以适应另一个ImageView的大小

时间:2018-10-23 22:29:40

标签: java android kotlin

我有一张要制作动画的图片,然后移到另一个ImageView位置。

目前这是我正在做的事情:

                v.animate()
                    .scaleX(??)
                    .scaleY(??)
                    .x(target.x)
                    .y(target.y)
                    .setDuration(1000)
                    .start()

我的问题是如何为x和y计算正确的比例因子?如果我将布局参数设置为与目标的布局参数相等,则它可以正常工作,但不会设置动画。我已经尝试将源图像的宽度和高度与目标图像相除,但是它并没有给我正确的比例。

感谢您的帮助

3 个答案:

答案 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()

最初,出于测试目的,请增加持续时间,以便您可以注意到动画并可以根据需要进行必要的更改。