3

我正在尝试Scale AnimationRelativeLayout. 我想将图像从左角缩放到右上角,即从下到上对角线(从左到右)。我使用了以下代码行,但没有得到预期的结果。谁能用简单的话解释一下 pivotx 和 pivoty 是做什么的?

ScaleAnimation scale = new ScaleAnimation(0, 1, 1, 0);
4

2 回答 2

9

我正在使用以下动画ImageView从左下到右上。即从下到上对角线。

img = (ImageView) findViewById(R.id.img);

ScaleAnimation scaleAnim = new ScaleAnimation(
             0f, 1f, 
             0f, 1f,
             Animation.ABSOLUTE, 0,
             Animation.RELATIVE_TO_SELF , 1);
scaleAnim.setDuration(10000);
scaleAnim.setRepeatCount(0);
scaleAnim.setInterpolator(new AccelerateDecelerateInterpolator());
scaleAnim.setFillAfter(true);
scaleAnim.setFillBefore(true);
scaleAnim.setFillEnabled(true);

img.startAnimation(scaleAnim);

您需要仔细给出枢轴及其值。

在这种情况下,我将简要说明它是如何与文档解释一起工作的:

fromX:在动画开始时应用的水平缩放因子

toX:在动画结束时应用的水平缩放因子

fromY:在动画开始时应用的垂直缩放因子

toY:在动画结束时应用的垂直缩放因子

我们需要从小点开始动画,并希望将其缩放到它的大小。所以fromXandfromY被认为是 0f,and toXandtoY是 1f。

pivotXType:指定应该如何解释 pivotXValue。Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF 或 Animation.RELATIVE_TO_PARENT 之一。

pivotXValue:对象被缩放的点的 X 坐标,指定为绝对数,其中 0 是左边缘。(当对象改变大小时,该点保持固定。)如果 pivotXType 为 ABSOLUTE,则该值可以是绝对数,否则可以是百分比(其中 1.0 是 100%)。

我们希望 的左下边缘ImageView在整个动画中都存在。所以我们使用 pivotXType - ABSOLUTE。0 将是整个动画中应该存在的点。

pivotYType:指定应该如何解释 pivotYValue。Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF 或 Animation.RELATIVE_TO_PARENT 之一。

pivotYValue:对象被缩放的点的 Y 坐标,指定为绝对数,其中 0 是顶部边缘。(该点在对象改变大小时保持固定。)如果 pivotYType 为 ABSOLUTE,则该值可以是绝对数,否则可以是百分比(其中 1.0 是 100%)。

ImageView Y 轴需要相对于其当前位置进行动画处理。所以 pivotYType 是RELATIVE_TO_SELF1 是它的底角。所以底部不会随着缩放而向上移动。

希望这可以帮助。

于 2014-10-30T07:11:49.220 回答
0

试试这个,把它放在你的动画文件夹中,并将它设置为你的布局。

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
   <scale android:fromXScale="0.0" android:fromYScale="1.0"
          android:toXScale="1.0" android:toYScale="0.0" 
          android:duration="700" android:fillBefore="false" />

</set>

把它放在java代码中:

Animation logoMoveAnimation = AnimationUtils.loadAnimation(this, R.anim.logoanimation); 
layout.startAnimation(logoMoveAnimation);
于 2014-10-30T05:53:38.293 回答