Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 尝试测试AnimatedVectorDrawable“时出错”;Can';t从x变形为z“;_Android_Xml_Animation_Svg_Material Design - Fatal编程技术网

Android 尝试测试AnimatedVectorDrawable“时出错”;Can';t从x变形为z“;

Android 尝试测试AnimatedVectorDrawable“时出错”;Can';t从x变形为z“;,android,xml,animation,svg,material-design,Android,Xml,Animation,Svg,Material Design,我想制作一个动画矢量绘图,这样我的工厂就可以通过动画和其他东西看起来至少有点不可思议 我找到了,关于如何使用和实现它们等等,后来我找到了将SVG转换为Android VectorDrawable的方法,并转换了这两个图像: 这就是我提出的xml“代码”: drawable/vector\u add.xml: java -jar vectalign.jar --start "M 10,20..." --end "M 30,30..." -------------------- ALIGN

我想制作一个动画矢量绘图,这样我的工厂就可以通过动画和其他东西看起来至少有点不可思议

我找到了,关于如何使用和实现它们等等,后来我找到了将SVG转换为Android VectorDrawable的方法,并转换了这两个图像:

这就是我提出的xml“代码”:

drawable/vector\u add.xml:

java -jar  vectalign.jar --start "M 10,20..." --end "M 30,30..."
--------------------
  ALIGNMENT RESULT  
-------------------- 
# new START sequence:  
M 48.0,54.0 L 31.0,42.0 L 15.0,54.0 L 21.0,35.0 L 6.0,23.0 L 25.0,23.0 L 25.0,23.0 L 25.0,23.0 L 25.0,23.0 L 32.0,4.0 L 40.0,23.0 L 58.0,23.0 L 42.0,35.0 L 48.0,54.0 

# new END sequence:  
M 48.0,54.0 L 48.0,54.0 L 48.0,54.0 L 48.0,54.0 L 31.0,54.0 L 15.0,54.0 L 10.0,35.0 L 6.0,23.0 L 25.0,10.0 L 32.0,4.0 L 40.0,10.0 L 58.0,23.0 L 54.0,35.0 L 48.0,54.0 
我的猜测是,两个svg中的两个路径太不一样了,因此Android无法单独处理动画,我需要为每个动画“检查点”制作几个矢量绘图

…我可能完全偏离了这个理论,但这是我能想到的最符合逻辑的

我没有太多的经验(也没有任何经验)与矢量和Illustrator等工作,所以任何帮助你们可以想出将不胜感激

祝你今天愉快, 圣诞快乐

真诚地,
Måns.

您希望变形的矢量绘图表必须兼容,这意味着它们必须具有相似的复杂性;命令的长度和数量相似(pksink提到了这一点)

这样,我最终解决了这个问题,使用了“加号”符号,并在android studio中手动修改了尺寸,直到我得到了类似于复选标记的东西

加向量:

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

    <group android:name="plus_group" android:pivotX="12" android:pivotY="12">
        <path
            android:name="plus_path"
            android:strokeColor="@android:color/white"
            android:strokeWidth="3"
            android:pathData="M12,0L12,24M0,12,L24,12" />
    </group>
</vector>

复选标记向量:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:viewportWidth="24"
    android:viewportHeight="24"
    android:width="24dp"
    android:height="24dp">
    <group android:name="check_group"
        android:pivotX="12"
        android:translateX="0"
        android:pivotY="12">

        <path
            android:name="check_path"
            android:strokeColor="@android:color/white"
            android:strokeWidth="3"
            android:pathData="M20,0L06,20M0,14,L08,19" />
    </group>
</vector>

请注意,这些命令的数量相同。复选标记看起来并不完美,但如果将其置于浮动操作按钮中,则无法注意到


附加提示:将pathData移动到字符串变量。这样,在objectAnimators中更容易保持一致性。

如果希望在任意SVG图像之间变形(或
VectorDrawable
),则需要对齐相应的路径,以使其与变形兼容。 这是一项非常繁琐的任务,但有一个命令行工具可以为您完成这项任务:

您只需从命令行运行VectAlign工具,并传递原始路径,它就会自动创建“可变形”序列

用法示例:

java -jar  vectalign.jar --start "M 10,20..." --end "M 30,30..."
--------------------
  ALIGNMENT RESULT  
-------------------- 
# new START sequence:  
M 48.0,54.0 L 31.0,42.0 L 15.0,54.0 L 21.0,35.0 L 6.0,23.0 L 25.0,23.0 L 25.0,23.0 L 25.0,23.0 L 25.0,23.0 L 32.0,4.0 L 40.0,23.0 L 58.0,23.0 L 42.0,35.0 L 48.0,54.0 

# new END sequence:  
M 48.0,54.0 L 48.0,54.0 L 48.0,54.0 L 48.0,54.0 L 31.0,54.0 L 15.0,54.0 L 10.0,35.0 L 6.0,23.0 L 25.0,10.0 L 32.0,4.0 L 40.0,10.0 L 58.0,23.0 L 54.0,35.0 L 48.0,54.0 
输出:

java -jar  vectalign.jar --start "M 10,20..." --end "M 30,30..."
--------------------
  ALIGNMENT RESULT  
-------------------- 
# new START sequence:  
M 48.0,54.0 L 31.0,42.0 L 15.0,54.0 L 21.0,35.0 L 6.0,23.0 L 25.0,23.0 L 25.0,23.0 L 25.0,23.0 L 25.0,23.0 L 32.0,4.0 L 40.0,23.0 L 58.0,23.0 L 42.0,35.0 L 48.0,54.0 

# new END sequence:  
M 48.0,54.0 L 48.0,54.0 L 48.0,54.0 L 48.0,54.0 L 31.0,54.0 L 15.0,54.0 L 10.0,35.0 L 6.0,23.0 L 25.0,10.0 L 32.0,4.0 L 40.0,10.0 L 58.0,23.0 L 54.0,35.0 L 48.0,54.0 
现在,您可以在Android项目中使用这些新序列,并像往常一样使用
AnimatedVectorDrawable
在它们之间变形

您还可以传递SVG文件:

java -jar  vectalign.jar --start image1.svg --end image2.svg
这是VectAlign中的一个示例:


请仔细阅读“这是路径_morph.xml,它将路径从一个形状变形为另一个形状。请注意,路径必须兼容变形。更详细地说,路径的命令长度应该完全相同,每个命令的参数长度也应该完全相同。”@pskink谢谢您,先生。虽然我一个字都不懂,但现在我明白了,我对这类事情太笨了。如果在第一条路径中有命令“l”(行),那么在第二条路径中也必须有命令“l”(行),并且具有相同数量的参数(它们当然可以不同以使动画发生),“+”由两行组成,对吗?"√" 或"✓也;)例如:“+”是“M2,8 14,8 M 8,2 8,14”和✓是“M 2,8 6,14 M 6,14,4”(未在设备上测试,仅取自inkscape)但是对齐是非常随机的。这种工具使两条路径随机匹配,两个简单SVG之间的转换看起来非常错误。对于具有数十条指令的复杂形状,我们应该如何使它们兼容?有没有任何工具允许以合理的方式使两条路径兼容(即显示从和到路径并让您操作)我有完美的路径。它们与材质设计页面中提供的图标完全相同。加上路径:M12,5 L12,19 M5,12 L19,12(笔划宽度=2)。完成路径:M20.3,6.3 L8.3,18.3 M4.1,12.7 L9.7,18.3(笔划宽度=1.98,但您可以使用2)