Android动画ObjectAnimator:以中心点为轴心旋转

10

我有一个看似简单的问题,但却无法理解。我想使用ObjectAnimator创建一个从中心向上缩放的动画。然而,我不知道如何设置PivotX/Y属性,因为我应用的任何值似乎都不会影响视图。当我使用ScaleAnimation时,它可以正常工作,但是我必须在这里使用ObjectAnimator。

我尝试过:

ObjectAnimator scaleX = ObjectAnimator.ofFloat(view,"scaleX",0.0f,1.0f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(view,"scaleY",0.0f,1.0f);

//I've tried a wide range of values from 0,0 to 0,0.5, to 0.5, 0.5 but none of them do anything
ObjectAnimator pivotX = ObjectAnimator.ofFloat(view,"pivotX",0,1f);
ObjectAnimator pivotY = ObjectAnimator.ofFloat(view,"pivotY",0,1f);

//I've also tried view.setPivotX(0.5f) but that didn't do anything either

animatorSet.playTogether(scaleX,scaleY,pivotX,pivotY);
animatorSet.start();

我不太确定如何让它从中间进行缩放。我尝试过不使用枢轴点,但那也没有什么效果。

非常感谢您的帮助。

谢谢

**编辑**

以下方式有些作用,但它并不完全居中,而是朝左上方增长,但仍然有点居中。很难描述。我尝试使用0.5f,但也不起作用。

ObjectAnimator pivotX = ObjectAnimator.ofFloat(view,"pivotX",1f);
ObjectAnimator pivotY = ObjectAnimator.ofFloat(view,"pivotY",1f);
3个回答

7

我曾遇到一个类似的问题,需要对XML中定义的矢量动画进行缩放。现在,只需在Drawable而不是ObjectAnimator中设置pivotX和pivotY,就可以使其从中心进行缩放,例如:

<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:aapt="http://schemas.android.com/aapt" >
    <aapt:attr name="android:drawable">
        <vector xmlns:android="http://schemas.android.com/apk/res/android"
            android:width="100dp"
            android:height="100dp"
            android:viewportWidth="100"
            android:viewportHeight="100">
            <group
                android:name="scaleGroup"
                android:pivotX="50"
                android:pivotY="50"
                android:scaleX="1.0"
                android:scaleY="1.0" >
                <path
                    android:name="v"
                    android:strokeColor="#00e9bd"
                    android:strokeWidth="6"
                    android:pathData="M 50 13 C 70.4345357437 13 87 29.5654642563 87 50 C 87 70.4345357437 70.4345357437 87 50 87 C 29.5654642563 87 13 70.4345357437 13 50 C 13 29.5654642563 29.5654642563 13 50 13 Z" />
            </group>
        </vector>
    </aapt:attr>

    <target android:name="scaleGroup"> *
        <aapt:attr name="android:animation">
            <set>
                <objectAnimator
                   android:duration="1000"
                   android:propertyName="scaleX"
                   android:valueFrom="0.5"
                   android:valueTo="1.0" />
               <objectAnimator
                   android:duration="1000"
                   android:propertyName="scaleY"
                   android:valueFrom="0.5"
                   android:valueTo="1.0" />
            </set>
        </aapt:attr>
    </target>
</animated-vector>

5
如果您希望扩大规模,有一个明确的选择是:
view.setPivotY(100);

以及向下:

view.setPivotY(0);

然后执行动画。

1

pivotXpivotY应该分别是viewportWidthviewportHeight的1/2,如果您想要从中心进行缩放。

这些属性应该设置在您的矢量图可绘制对象的组标签上。这个组标签应该在您想要缩放的路径标签之外,类似于上面的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接