当前位置: 首页 > 面试题库 >

支持库中的AnimatedVectorDrawable和“ pathData”的动画

赵辉
2023-03-14
问题内容

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

compile 'com.android.support:support-vector-drawable:23.2.0'
compile 'com.android.support:animated-vector-drawable:23.2.0'

我正在尝试设置动画“ pathData ”(将行彼此变形)。我的代码如下所示。

drawable / 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>

drawable / 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>

动画师/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>

Java代码

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

它在 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)

根据android-support-library-232的文章,应将动画矢量(AnimatedVectorDrawableCompat)支持回 API级别11

似乎从 tick_path_animation.xml 读取 valueFrom 属性时 失败 。此属性类型“
pathType”可能不受支持(尚未?)。任何想法如何解决这个问题?


问题答案:

抱歉,此功能不适用于当前版本的支持库(23.2.0)。

请参阅Chris Banes文章。

在<API 21的平台上运行时,动画矢量可以执行的操作也有一些限制。以下是当前在这些平台上不起作用的事情:

路径变形(PathType评估器)。这用于将一个路径变形为另一路径。

路径插补。这用于定义灵活的插补器(表示为路径),而不是系统定义的插补器(如LinearInterpolator)。

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

因此,当前不支持对pathData进行动画处理或“路径变形”。

更新:
弗兰克的评论:

最终在支持库25.4.0(2017年6月)中对此进行了修复:“ AnimatedVectorDrawableCompat支持路径变形和路径插值”



 类似资料:
  • 我对Android Studio3.0金丝雀有一个问题。在所有项目中,我不能使用预览工具中的支持库中的任何视图。显示呈现错误。在新项目中也是同样的问题。 Samople代码: 格雷德尔:

  • 您知道将引入Android支持库的计划吗?对于promise模式,它看起来是一个很好的解决方案。

  • 我想用com。Android支持:设计:22.2.0在我的Android Studio(1.3)项目中,但当我添加'com'时。Android支持:设计:22.2.0'到依赖{}我有103个错误,我无法摆脱这个错误。 如果我尝试使用新版本的appcompat,也会发生同样的情况。现在我有了“com”。Android支持:appcompat-v7:19。“以我的身材。格雷德尔。 有人知道吗? 我的错

  • Django试图尽可能多的支持所有数据库后端的特性。然而,并不是所有数据库都一样,所以我们必须在支持哪些特性和做出哪些安全的假定上做出设计决策。 本文描述了一些Django使用数据库的有关特性。当然,它并不想成为各服务器指定的文档或者参考手册的替代品。 综合说明 持续连接特性 持续连接的特性避免了每一次重新建立与数据库的连接的请求中所增加的压力。这些连接通过 CONN_MAX_AGE 参数(控制一

  • 晚上好, 我被重定向到这里问我的问题,而不是Quarkus github。 我想查看Quarkus支持哪个库? 搜索专家存储库:https://mvnrepository.com/search?q=quarkus s3 我能找到的最接近的是<code>Camel Quarkus::AWS S3::Runtime</code>,但我认为这不是正确的。非常感谢。

  • 寻找Apache Commons Compress的替代压缩java库(https://Commons.Apache.org/proper/commons-compress/)。当试图读取使用“enhanced_deflated”(即deflate64)压缩的zip条目时,Commons Compress会引发错误。下面是抛出异常的示例摘录。 下面是堆栈跟踪的相关部分: unsupportedZi