Android可绘制的剪辑路径图层是否可以旋转?

6

我刚开始在矢量可绘制对象中使用剪辑路径。我想旋转剪辑路径,但是没有办法旋转任何路径而不将其放入组中,以便它可以具有pivotX和pivotY属性。然而,当放入组中时,它不再剪辑组外的路径(因此变得无用)。是否有解决方法?这是我的可绘制对象(在此状态下,由于我提到的原因,剪辑无效):

<!-- drawable/bluetooth_audio.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="48dp"
    android:width="48dp"
    android:viewportWidth="24"
    android:viewportHeight="24">

    <group
        android:name="maskGroup"
        android:pivotX="12"
        android:pivotY="12">

        <clip-path
            android:name="mask"
            android:pathData="M12,0 V12 H24 V24 H0 V0"/>

    </group>

    <group
        android:name="base"
        android:pivotX="12"
        android:pivotY="12">
        <path
            android:fillColor="#FFF"
            android:pathData="M12.88,16.29L11,18.17V14.41M11,5.83L12.88,7.71L11,9.58M15.71,7.71L10,2
            H9V9.58L4.41,5L3,6.41L8.59,12L3,17.58L4.41,19L9,14.41V22H10L15.71,16.29L11.41,12M19.53,6.71L18.26,8M14.24,12L16.56,14.33C16.84,13.6 17,12.82 17,12C17,11.18 16.84,10.4 16.57,9.68L14.24,12Z"/>
        <path
            android:fillColor="#FFF"
            android:pathData="
            M18.26,8
            C18.89,9.18 19.25,10.55 19.25,12
            C19.25,13.45 18.89,14.82 18.26,16
            L19.46,17.22
            C20.43,15.68 21,13.87 21,11.91
            C21,10 20.46,8.23 19.53,6.71
            "
            />

    </group>
</vector>
2个回答

1

实际上,路径(Path)和剪切路径(clip-path)用于不同的目的。

剪切路径(clip-path):用于获取画布或视口来绘制。

路径(Path):用于在该视口上呈现图形。

因此,请勿使用剪切路径进行绘图或动画。如果您在剪切路径之外绘制任何内容,将不会呈现或显示。参考文献:https://developer.mozilla.org/en-US/docs/Web/SVG/Element/clipPath


我看过一些使用剪辑路径(clip path)创建动画的Android工程师的视频...据我所知,剪辑路径用于Lollipop上的动画(快速设置图标)。如果剪辑路径不是我应该使用的工具,那么什么是?有哪些工具可以实现这种类型的动画? - Aleksandar Stefanović

0

如果起始状态和结束状态都具有相同数量的pathData步骤,则可以动画化剪辑路径的更改;也许可以定义“旋转”剪辑路径的结束状态,然后动画化剪辑路径?应用objectAnimator的方式可能如下所示:

<objectAnimator
xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="pathData"
android:valueFrom="M18 37 L38 37 L38 37 L18 37 Z"
android:valueTo="M0 0 L56 0 L56 56 L0 56 Z"
android:duration="600"
android:interpolator="@android:interpolator/fast_out_slow_in"
android:valueType="pathType" />

编辑:在Android文档中找到了这个

AnimatedStateListDrawable类允许您创建可显示与关联视图的状态更改之间的动画的可绘制对象。 Android 5.0中的一些系统小部件默认使用这些动画。 以下示例显示如何将AnimatedStateListDrawable定义为XML资源:

AnimatedStateListDrawable类允许您创建可显示与关联视图的状态更改之间的动画的可绘制对象。 Android 5.0中的一些系统小部件默认使用这些动画。 以下示例显示如何将AnimatedStateListDrawable定义为XML资源:

<!-- res/drawable/myanimstatedrawable.xml -->
<animated-selector
xmlns:android="http://schemas.android.com/apk/res/android">

<!-- provide a different drawable for each state-->
<item android:id="@+id/pressed"
android:drawable="@drawable/drawableP"
    android:state_pressed="true"/>
<item android:id="@+id/focused"
android:drawable="@drawable/drawableF"
    android:state_focused="true"/>
<item android:id="@id/default"
    android:drawable="@drawable/drawableD"/>

<!-- specify a transition -->
<transition android:fromId="@+id/default"
android:toId="@+id/pressed">
    <animation-list>
        <item android:duration="15"
android:drawable="@drawable/dt1"/>
        <item android:duration="15"
android:drawable="@drawable/dt2"/>
        ...
    </animation-list>
</transition>
...
</animated-selector>

https://developer.android.com/reference/android/graphics/drawable/AnimatedStateListDrawable.html

https://developer.android.com/training/material/animations.html#Transitions


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接