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

jwi*_*ir3 5 xml animation android

我在 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>
Run Code Online (Sandbox Code Playgroud)

我想要的是pivotX和pivotY位于对象的中心,而不是左上角。我知道我可以通过代码来完成此任务,但我宁愿不这样做。相反,我想在 XML 文件中指定它。我想过这样做:

<objectAnimator
  android:propertyName="pivotX"
  android:valueTo="50%" />
<objectAnimator
  android:propertyName="pivotY"
  android:valueTo="50%" />
Run Code Online (Sandbox Code Playgroud)

但是,这似乎也会尝试为该属性设置动画,这不是我想要的。相反,我希望它设置枢轴,然后执行动画。我可以在 XML 中执行此操作吗?如果可以,如何执行?

pro*_*m85 1

没有答案的老问题,我在其他地方找不到答案,所以我将在这里发布我的解决方案:

逻辑:

  • 在开始动画中,使用动画将枢轴设置为您想要的值duration=0
  • 添加durations到所有其他动画
  • startOffset最后动画通过使用和重置枢轴duration=0

最好不要使用持续时间,也不要重置枢轴...在这种情况下,枢轴将保持原样,这在大多数情况下是无关紧要的。

代码

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <set>
            <objectAnimator
                android:duration="0"
                android:propertyName="pivotX"
                android:valueTo="0" />

            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleX"
                android:valueTo="0.85" />

            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleY"
                android:valueTo="0.85" />
        </set>
    </item>
    <item android:state_pressed="false">
        <set>

            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleX"
                android:valueTo="1.0" />

            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleY"
                android:valueTo="1.0" />

            <objectAnimator
                android:duration="0"
                android:propertyName="pivotX"
                android:startOffset="@android:integer/config_shortAnimTime"
                android:valueTo="0" />

        </set>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)