android - AnimatedVectorDrawable 圆到线

标签 android svg android-vectordrawable

我想在Android中实现一个将圆变成直线的动画。

我发现这可以通过 AnimatedVectorDrawable 实现我应该使用像这样的 objectanimator 来进行路径转换:

<objectAnimator
     android:duration="3000"
     android:propertyName="pathData"
     android:valueFrom="M300,70 l 0,-70 70,70 0,0   -70,70z"
     android:valueTo="M300,70 l 0,-70 70,0  0,140 -70,0 z"
     android:valueType="pathType"/>

根据文档,如果想要将一条路径变形为另一条路径,路径必须兼容变形。更详细地说,路径应该具有完全相同的命令长度,以及每个命令的完全相同的参数长度。

我已经开始读这个:SVG elliptical arc commands ,我认为技巧是用一些圆弧/圆命令实现一条线。

有没有办法做到这一点,使直线路径数据可以具有与圆相同的长度和相同的命令?

最佳答案

Iftah 的答案让我走上了一条很好的道路,这就是我的做法,它基本上是用两条三次贝塞尔曲线逼近一个圆(一个用于上半圆,另一个用于下半圆)。小解释可以参见here .

代码方面,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="500dp"
    android:height="500dp"
    android:viewportWidth="500"
    android:viewportHeight="500">

<group>
    <path
        android:name="circle_line"
        android:fillColor="@android:color/black"
        android:strokeColor="@android:color/black"
        android:strokeWidth="5"
        android:pathData="@string/circle_data"/>
</group>

路径数据:

<!-- paths -->
<string name="circle_data">M 125 250 C 137.5 83.34 362.5 83.34 375 250 M 125 250 C 137.5 416.66 362.5 416.66 375 250</string>
<string name="line_data">M 50 250 C 125 250 125 250 250 250 M 250 250 C 375 250 375 250 450 250</string>

动画效果很好,我只需要改进一些点即可自定义动画外观。

关于android - AnimatedVectorDrawable 圆到线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28877250/

相关文章:

svg - 如何使用 webpack 直接在 React 组件中加载 SVG?

javascript - 有没有办法用javascript解析svg文件

Android Vector Drawable 崩溃

android - VectorDrawable 已缩放且未锐化

android - 无法在带有android adt插件的eclipse中使用复选框

设置断点时 Android Activity 崩溃

android - nineoldandroid 的动画代理无法正常工作 2.2

javascript - SVG 旋转和缩放转换问题

android - 无法返回主要 Activity

java - Android 按钮方向垂直宽度 100%