支持库中的AnimatedVectorDrawable和"pathData"的动画

Jiř*_*ger 11 java android android-animation android-support-library android-vectordrawable

我使用动画矢量支持库23.2.0,就像这样:

compile 'com.android.support:support-vector-drawable:23.2.0'
compile 'com.android.support:animated-vector-drawable:23.2.0'
Run Code Online (Sandbox Code Playgroud)

我试图动画" pathData "(将线条变换为另一个).我的代码看起来像这样.

绘制/ ic_done.xml:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <path
        android:name="tick"
        android:pathData="M4.8,12L9,16.2L20,8"
        android:strokeColor="#FF000000" />
</vector>
Run Code Online (Sandbox Code Playgroud)

绘制/ ic_done_animated.xml:

<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:drawable="@drawable/ic_done">
    <target
        android:name="tick"
        android:animation="@animator/tick_path_animation" />
</animated-vector>
Run Code Online (Sandbox Code Playgroud)

动画师/ tick_path_animation.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">
    <objectAnimator
        android:duration="200"
        android:propertyName="pathData"
        android:valueFrom="M4.8,12L4.8,12L4.8,12"
        android:valueTo="M4.8,12L9,16.2L9,16.2"
        android:valueType="pathType" />
    <objectAnimator
        android:duration="200"
        android:propertyName="pathData"
        android:valueFrom="M4.8,12L9,16.2L9,16.2"
        android:valueTo="M4.8,12L9,16.2L20,8"
        android:valueType="pathType" />
</set>
Run Code Online (Sandbox Code Playgroud)

Java代码:

ImageView vImgAnimated = findByViewId(R.id.img);
AnimatedVectorDrawableCompat animatedVector = AnimatedVectorDrawableCompat.create(getContext(), R.drawable.ic_done_animated);
vImgAnimated.setImageDrawable(animatedVector);
animatedVector.start();
Run Code Online (Sandbox Code Playgroud)

它在API级别为21的新设备上运行良好,但我在API级别为16的设备上遇到问题:

java.lang.NumberFormatException: Invalid int: "M4.8,12L4.8,12L4.8,12"
    at java.lang.Integer.invalidInt(Integer.java:138)
    at java.lang.Integer.parse(Integer.java:375)
    at java.lang.Integer.parseInt(Integer.java:366)
    at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:123)
    at android.content.res.TypedArray.getInt(TypedArray.java:254)
    at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:258)
    at android.animation.AnimatorInflater.loadObjectAnimator(AnimatorInflater.java:161)
    at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:117)
    at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:126)
    at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:93)
    at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:72)
    at android.support.graphics.drawable.AnimatedVectorDrawableCompat.inflate(AnimatedVectorDrawableCompat.java:377)
    at android.support.graphics.drawable.AnimatedVectorDrawableCompat.createFromXmlInner(AnimatedVectorDrawableCompat.java:162)
    at android.support.graphics.drawable.AnimatedVectorDrawableCompat.create(AnimatedVectorDrawableCompat.java:142)
Run Code Online (Sandbox Code Playgroud)

根据文章android-support-library-232,应该支持动画向量(AnimatedVectorDrawableCompat)回到API级别11.

tick_path_animation.xml读取valueFrom属性时,它看起来很失败.可能不支持此属性类型"pathType"(还是?).不知道怎么解决这个问题?

Lew*_*ary 23

抱歉,这不适用于当前版本的支持库(23.2.0).

请参阅Chris Banes的文章.

在平台<API 21上运行时,动画矢量可以做什么样的事情也有一些限制.以下是目前在这些平台上不起作用的事情:

路径变形(PathType评估程序).这用于将一条路径变形为另一条路径.

路径插值.这用于定义灵活插值器(表示为路径),而不是像LinearInterpolator那样定义系统定义的插值器.

沿着路径移动.这很少使用.几何对象可以沿任意路径移动.

因此目前不支持动画pathData或"Path Morphing".

更新:
弗兰克的评论:

这最终在支持lib 25.4.0(2017年6月)中修复:"AnimatedVectorDrawableCompat支持路径变形和路径插值"

  • 仍然无法在24.2.0中工作.这有点让我对支持库的整个'Compat'部分无用!在说明兼容性回到API11之后相当烦人,但隐藏了不起作用的"相关"细节.应该叫AnimatedVectorDrawablePartiallyCompat .. (7认同)
  • 这最终在支持库 25.4.0(2017 年 6 月)中得到修复:“AnimatedVectorDrawableCompat 中支持路径变形和路径插值” (2认同)