android - 如何在 Vector Drawable 中对图标的特定部分进行动画处理?

标签 android android-animation android-vectordrawable

我是矢量可绘制动画的新手,因为我在矢量可绘制动画中有通知 Activity 图标。

通知图标矢量路径代码:-

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="140dp"
android:height="140dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
    android:fillColor="@color/dark_grey"
    android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42zM18,11c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2v-5zM12,22c0.14,0 0.27,-0.01 0.4,-0.04 0.65,-0.14 1.18,-0.58 1.44,-1.18 0.1,-0.24 0.15,-0.5 0.15,-0.78h-4c0.01,1.1 0.9,2 2.01,2z" />

图标会是这样的

enter image description here

只想使用矢量可绘制动画来制作外环的动画。谁能指导我学习矢量绘制动画。

最佳答案

VectorDrawable路径使用与 SVG paths 相同的语法。按照这些说明操作,您可以看到路径首先描绘出左右环部分,然后是主体和底部。

为了将振铃器的动画与主体分开,请将其分成自己的路径。

<!-- The ringer -->
<path
    android:fillColor="@color/dark_grey"
    android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42z" />
<!-- The body -->
<path
    android:fillColor="@color/dark_grey"
    android:pathData="M18,11c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2v-5zM12,22c0.14,0 0.27,-0.01 0.4,-0.04 0.65,-0.14 1.18,-0.58 1.44,-1.18 0.1,-0.24 0.15,-0.5 0.15,-0.78h-4c0.01,1.1 0.9,2 2.01,2z" />

然后我们需要给该部分一个名称,以便动画师可以附加到它,并将其包装在 <group> 中。如果您想为其位置或旋转设置动画。我盯着旋转的枢轴点。

<group android:name="ringer" android:pivotX="12" android:pivotY="10.5">
    <path
        android:fillColor="@color/dark_grey"
        android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42z" />
</group>

现在您可以将其嵌入到 AnimatedVectorDrawable 中并将动画附加到该组。

<?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 android:width="140dp" android:height="140dp"
            android:viewportWidth="24.0" android:viewportHeight="24.0">
            <group android:name="ringer" android:pivotX="12" android:pivotY="10.5">
                <path
                    android:fillColor="@color/dark_grey"
                    android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42z" />
            </group>
            <path
                android:fillColor="@color/dark_grey"
                android:pathData="M18,11c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2v-5zM12,22c0.14,0 0.27,-0.01 0.4,-0.04 0.65,-0.14 1.18,-0.58 1.44,-1.18 0.1,-0.24 0.15,-0.5 0.15,-0.78h-4c0.01,1.1 0.9,2 2.01,2z" />
        </vector>
    </aapt:attr>
    <target android:name="ringer">
        <aapt:attr name="android:animation">
            <objectAnimator
                android:duration="50"
                android:propertyName="rotation"
                android:valueFrom="-15"
                android:valueTo="15"
                android:repeatCount="infinite"
                android:repeatMode="reverse"/>
        </aapt:attr>
    </target>
</animated-vector>

别忘了调用Animatable2#start()当您希望它运行时,在可绘制对象上。

关于android - 如何在 Vector Drawable 中对图标的特定部分进行动画处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43290941/

相关文章:

android - 自定义方形相机 - Android

android - 前台服务和 WakeLocks 不适用于华为设备

android - 有没有办法改变菜单项图标和文本的颜色?

android - Jetpack 撰写 : Custom VectorAsset Icon object similar to built-in `Icons.Default`

android - 如何将 imageview 移动到右侧获取 android 中的 Activity ?

Android Build from source find - 没有这样的文件目录错误

android - Google map 布局如何动画化?

Android - 从 Circular Reveal (Lollipop) 中删除背景

java - CardView 在第二次点击时不展开

java - 在 API 19 上缩放 VectorDrawable