如何在运行时更改可绘制矢量的动画视口?

时间:2018-10-16 13:31:32

标签: android android-animation viewport

我正在尝试为我的android应用程序中的自定义地图标记制作动画。可以将初始视口想象成一个直立的矩形(动画矢量形状,即本例中的标记占据了该矩形的大部分)。初始值如下:

  • 宽度:57(指的是我要设置动画的对象)
  • 高度:80(指的是我要设置动画的对象)
  • 视口宽度:57
  • 视口高度:80

然后,在运行期间,如果单击了标记,则它将旋转-90度。逻辑上,边界框的宽度现在为80,高度为57。但是,视口仍保持其初始大小。因此,一半的动画矢量形状被切除了。

我曾尝试过手动更改视口的大小以使其更大,但这没有用,因为它使每个不是57和80的组合扭曲了我的形状。

是否也可以旋转视口,因为我不希望缩小矢量形状,以使其适合初始视口。

这是我的xml文件,代表可绘制的动画矢量:

<animated-vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt">
    <aapt:attr name="android:drawable">
        <vector
            android:name="vector"
            android:width="57dp"
            android:height="80dp"
            android:viewportWidth="57"
            android:viewportHeight="80">
            <group android:name="group"
                android:pivotX="40"
                android:pivotY="28.5">
                <path
                    android:name="path"
                    android:pathData="M 28.41 2.24 L 8.08 22.24 L 28.41 42.49 L 48.74 22.24 L 28.41 2.24 Z"
                    android:fillColor="#ffffff"
                    android:strokeColor="#ffffff"
                    android:strokeWidth="1"
                    android:strokeMiterLimit="10"/>
                <path
                    android:name="path_1"
                    android:pathData="M 28.41 52.03 L 2.99 26.49 L 2.99 52.07 L 28.41 77.57 L 53.33 52.03 L 53.33 26.49 L 28.41 52.03 Z"
                    android:fillColor="#ffffff"
                    android:strokeColor="#ffffff"
                    android:strokeWidth="1"
                    android:strokeMiterLimit="10"/>
            </group>
        </vector>
    </aapt:attr>
    <target android:name="group">
        <aapt:attr name="android:animation">
            <set>
                <objectAnimator
                    android:propertyName="rotation"
                    android:duration="300"
                    android:valueFrom="0"
                    android:valueTo="-90"
                    android:valueType="floatType"
                    android:interpolator="@android:interpolator/fast_out_slow_in"/>
            </set>
        </aapt:attr>
    </target>
</animated-vector>

还有一点要注意:枢轴点(即矢量形状围绕其旋转的点)设置为视口的中心,因此排除了枢轴点错误(希望如此)。

0 个答案:

没有答案