Android转换图标到另一个

时间:2015-06-30 18:14:41

标签: android icons android-animation

我怎样才能将图标的动画转换为另一个图标,例如箭头(导航抽屉)中的汉堡或十字架(收件箱)中的铅笔?我怎样才能改变这个动画?

2 个答案:

答案 0 :(得分:11)

可以使用animated-vector

实现图标动画

首先将您的图标定义为矢量绘图。例如,让我们选择勾选以找到here找到的动画。我们会将ic_tick设为ic_cross

ic_cross.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="120dp"
        android:height="120dp"
        android:viewportWidth="@integer/viewport_width"
        android:viewportHeight="@integer/viewport_height">

    <group
        android:name="@string/groupTickCross"
        android:pivotX="@integer/viewport_center_x"
        android:pivotY="@integer/viewport_center_y">

        <path
            android:name="@string/cross"
            android:pathData="M6.4,6.4 L17.6,17.6 M6.4,17.6 L17.6,6.4"
            android:strokeWidth="@integer/stroke_width"
            android:strokeLineCap="square"
            android:strokeColor="@color/stroke_color"/>

    </group>

</vector>

ic_tick.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="120dp"
        android:height="120dp"
        android:viewportWidth="@integer/viewport_width"
        android:viewportHeight="@integer/viewport_height">

    <group
        android:name="@string/groupTickCross"
        android:pivotX="@integer/viewport_center_x"
        android:pivotY="@integer/viewport_center_y">

        <path
            android:name="@string/tick"
            android:pathData="M4.8,13.4 L9,17.6 M10.4,16.2 L19.6,7"
            android:strokeWidth="@integer/stroke_width"
            android:strokeLineCap="square"
            android:strokeColor="@color/stroke_color"/>

    </group>

</vector>

接下来,我们为每个步骤创建动画师。 valueFrom告诉动画的起点,valueTo是动画的最终产品。 interpolator是插值的类型,您可以在Android文档中找到更多内容。 duration指定动画的持续时间。

tick_to_cross.xml

<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="pathData"
    android:valueFrom="M4.8,13.4 L9,17.6 M10.4,16.2 L19.6,7"
    android:valueTo="M6.4,6.4 L17.6,17.6 M6.4,17.6 L17.6,6.4"
    android:duration="@integer/duration"
    android:interpolator="@android:interpolator/fast_out_slow_in"
    android:valueType="pathType"/>

现在,使用动画矢量,我们为矢量设置动画。这里<target android:name指定动画必须在其上完成的目标,android:animation告诉动画完成。

avd_tick_to_cross.xml

<animated-vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_tick">

    <target
        android:name="@string/tick"
        android:animation="@animator/tick_to_cross" />

</animated-vector>

如何在可绘制矢量之间进行动画处理有一些限制,但是如果您有清晰的图片可以动画到什么,以及动画应该如何进行,那么它们可能会以某种方式被黑客入侵。

答案 1 :(得分:3)

您可以使用ShapeShifter创建的Alex Lockwood将图标转换为另一个图标。您可以阅读这篇medium帖子,以清楚了解ShapeShifter