如何在XML中定义的ObjectAnimator上设置pivotX或pivotY?

时间:2013-12-20 17:09:42

标签: android xml animation

我对res / animator / grow.xml中的动画有以下定义:

<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:ordering="sequentially">
     <set>       
       <objectAnimator
           android:propertyName="scaleX"
           android:duration="150"
           android:valueFrom="1.0"
           android:valueTo="1.5"
           android:valueType="floatType" />
       <objectAnimator
           android:propertyName="scaleY"
           android:duration="150"
           android:valueFrom="1.0"
           android:valueTo="1.5"
           android:valueType="floatType" />
     </set>
</set>

我想要的是使pivotX和pivotY位于对象的中心,而不是左上角。我知道我可以通过代码实现这一目标,但我宁愿不这样做。相反,我想在XML文件中指定它。我想过这样做:

<objectAnimator
  android:propertyName="pivotX"
  android:valueTo="50%" />
<objectAnimator
  android:propertyName="pivotY"
  android:valueTo="50%" />

但是,这似乎也试图为该属性设置动画,这不是我想要的。相反,我希望它设置枢轴,然后执行动画。我可以用XML做这个,如果有的话,怎么做?

3 个答案:

答案 0 :(得分:0)

你必须在你的视图上定义它(android:transformPivotX和android:transformPivotY)(它现在是一个视图的属性,而不是ObjectAnimator的属性)。
两者都不是%,而是sp,dp或px ......

如果您使用VectorDrawable,它取决于viewPort坐标是该组的属性。

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportHeight="24.0"
        android:viewportWidth="24.0"
    >
    <group
        android:name="core"
        android:pivotX="12.0"
        android:pivotY="12.0">
        <path
            android:name="corepath"
            android:fillColor="#FF000000"
            android:pathData="@string/init_path_coreic_check_box_outline_blank_black_24dp"
            />
    </group>
</vector>

或者您可以继续使用TweenAnimation

答案 1 :(得分:0)

基本上,您可以更改视图属性,因此请使用transformPivotX和transformPivotY

这应该可以解决问题:

<objectAnimator
    android:propertyName="transformPivotX"
    android:valueTo="0.5"
    android:valueType="floatType" />

<objectAnimator
    android:propertyName="transformPivotY"
    android:valueTo="0.5"
    android:valueType="floatType" />

答案 2 :(得分:-2)

我对片段事务有类似的问题。 在布局文件android:transformPivotX中设置它的烦人之处在于它需要像素,而我需要像素。

虽然不是很漂亮,但您可以在ObjectAnimator中添加值,例如:

<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:duration="500"
        android:propertyName="scaleY"
        android:valueFrom="0.0"
        android:valueTo="1.0"
        android:valueType="floatType"/>

    <objectAnimator
        android:duration="500"
        android:propertyName="pivotY"
        android:valueFrom="1.0"
        android:valueTo="1.0"
        android:valueType="floatType"/>

</set>