图片和图形之矢量绘制(Vector drawables)(3)

2023-10-18 09:10

本文主要是介绍图片和图形之矢量绘制(Vector drawables)(3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文

概述

A VectorDrawable是一个矢量图形,在XML文件中定义为一组点,线和曲线及其相关的颜色信息。使用矢量绘图的主要优点是图像可伸缩性。它可以在不损失显示质量的情况下进行缩放,这意味着相同的文件可以根据不同的屏幕密度调整大小,而不会损失图像质量。这会导致更小的APK文件和更少的开发人员维护。对于每种显示分辨率,您还可以使用多个XML文件而不是多个图像来使用矢量图像进行动画。

Android Studio也可以将SVG文件转换为矢量可绘制格式

Android 5.0(API级别21)是第一个使用VectorDrawable 和正式支持向量绘制的版本 AnimatedVectorDrawable,但您可以使用支持Android的支持库来支持旧版本,该支持库提供了 VectorDrawableCompat和 AnimatedVectorDrawableCompat类。

关于VectorDrawable类

VectorDrawable定义一个静态可绘制对象。类似于SVG格式中,每个矢量图形被定义为一个树层次结构,其是由path与group对象。每个都path包含对象轮廓的几何图形并 group包含用于转换的详细信息。所有路径的绘制顺序与它们在XML文件中的显示顺序相同

示例XML
以下是一个示例VectorDrawableXML文件,用于在充电模式下呈现电池图像。

<!-- res/drawable/battery_charging.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"<!-- intrinsic size of the drawable -->android:height="24dp"android:width="24dp"<!-- size of the virtual canvas -->android:viewportWidth="24.0"android:viewportHeight="24.0"><groupandroid:name="rotationGroup"android:pivotX="10.0"android:pivotY="10.0"android:rotation="15.0" ><pathandroid:name="vect"android:fillColor="#FF000000"android:pathData="M15.67,4H14V2h-4v2H8.33C7.6,4 7,4.6 7,5.33V9h4.93L13,7v2h4V5.33C17,4.6 16.4,4 15.67,4z"android:fillAlpha=".3"/><pathandroid:name="draw"android:fillColor="#FF000000"android:pathData="M13,12.5h2L11,20v-5.5H9L11.93,9H7v11.67C7,21.4 7.6,22 8.33,22h7.33c0.74,0 1.34,-0.6 1.34,-1.33V9h-4v3.5z"/></group>
</vector>

该XML呈现以下图像:
图片和图形之矢量绘制(Vector drawables)(3)

关于AnimatedVectorDrawable类

AnimatedVectorDrawable将动画添加到矢量图形的属性中。您可以将动画矢量图形定义为三个单独的资源文件或定义整个绘图的单个XML文件。让我们看看两种方法,以便更好地理解:多个XML文件和单个XML文件。

多个XML文件

  • 一个VectorDrawableXML文件。
  • AnimatedVectorDrawable定义目标 的XML文件,VectorDrawable要设置动画的目标路径和组,动画,定义为ObjectAnimator对象或 AnimatorSet对象的属性和动画。
  • 动画师XML文件。

多个XML文件的示例

  • VectorDrawable的XML文件: vd.xml
    <vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="64dp"
    android:width="64dp"
    android:viewportHeight="600"
    android:viewportWidth="600" >
    <groupandroid:name="rotationGroup"android:pivotX="300.0"android:pivotY="300.0"android:rotation="45.0" ><pathandroid:name="vectorPath"android:fillColor="#000000"android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
    </group>
    </vector>
  • AnimatedVectorDrawable的XML文件: avd.xml
    <animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/vd" ><targetandroid:name="rotationGroup"android:animation="@anim/rotation" /><targetandroid:name="vectorPath"android:animation="@anim/path_morph" />
    </animated-vector>
  • AnimatedVectorDrawable的XML文件中使用的Animator XML文件:rotation.xml和path_morph.xml
    <objectAnimator
    android:duration="6000"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="360" />
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimatorandroid: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"/>
    </set>

单个XML文件

通过使用这种方法,您可以通过XML捆绑格式将相关的XML文件合并到一个XML文件中。在构建应用程序时, aapt标记会创建单独的资源并在动画矢量中引用它们。这种方法需要构建工具24或更高版本,并且输出是向后兼容的。
单个XML文件的示例

<animated-vectorxmlns:android="http://schemas.android.com/apk/res/android"xmlns:aapt="http://schemas.android.com/aapt"><aapt:attr name="android:drawable"><vectorandroid:width="24dp"android:height="24dp"android:viewportWidth="24"android:viewportHeight="24"><pathandroid:name="root"android:strokeWidth="2"android:strokeLineCap="square"android:strokeColor="?android:colorControlNormal"android:pathData="M4.8,13.4 L9,17.6 M10.4,16.2 L19.6,7" /></vector></aapt:attr><target android:name="root"><aapt:attr name="android:animation"><objectAnimatorandroid:propertyName="pathData"android:valueFrom="M4.8,13.4 L9,17.6 M10.4,16.2 L19.6,7"android:valueTo="M6.4,6.4 L17.6,17.6 M6.4,17.6 L17.6,6.4"android:duration="300"android:interpolator="@android:interpolator/fast_out_slow_in"android:valueType="pathType" /></aapt:attr></target>
</animated-vector>

向量drawables向后兼容性解决方案

要支持运行平台版本低于Android 5.0(API级别21)的设备上可绘制的矢量可绘制和动画矢量, VectorDrawableCompat 并且AnimatedVectorDrawableCompat 可通过两个新的支持库分别获得: support-vector-drawable和animated-vector-drawable。

Android Studio 1.4通过在构建时生成PNG文件,引入了对矢量绘图的有限兼容性支持。然而,矢量可绘制和动画矢量可绘制支持库提供了灵活性和广泛的兼容性 - 它是一个支持库,因此您可以将它与所有Android平台版本一起使用回到Android 2.1(API等级7+)。要将应用配置为使用矢量支持库,请将该vectorDrawables 元素添加到build.gradle应用模块中的文件中。

使用下面的代码片段来配置vectorDrawables 元素:

//For Gradle Plugin 2.0+android {defaultConfig {vectorDrawables.useSupportLibrary = true}}
//For Gradle Plugin 1.5 or below
android {defaultConfig {// Stops the Gradle plugin’s automatic rasterization of vectorsgeneratedDensities = []}// Flag notifies aapt to keep the attribute IDs aroundaaptOptions {additionalParameters "--no-version-vectors"}
}

您可以使用VectorDrawableCompat API级别7以及 AnimatedVectorDrawableCompat运行Android 3.0(API级别11)及更高级别的所有设备。Android加载drawable的方式并不是每个接受可绘制ID的地方都支持加载向量drawable。该 android.support.v7.appcompat软件包添加了许多功能,以便于使用矢量绘图。首先,当你使用 android.support.v7.appcompatpackage ImageView或with ImageButton和诸如and的 子类时 FloatingActionButton,可以使用new app:srcCompat属性来引用矢量绘图以及任何其他可绘制的drawable android:src:

<ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"app:srcCompat="@drawable/ic_add" />

要在运行时更改drawable,可以setImageResource() 像以前一样使用该 方法。使用AppCompat 和app:srcCompat是将矢量绘图集成到您的应用程序的最简单的方法。

Support Library 25.4.0及更高版本支持以下功能:

* 路径变形(PathType评估器)用于将一个路径变形为另一个路径。
* 路径插值用于定义灵活的插补器(表示为路径),而不是系统定义的插补器,如LinearInterpolator。

支持库26.0.0-beta1及更高版本支持以下功能:

* 沿路径移动几何对象可以沿任意路径移动,作为动画的一部分。

使用支持库的多个XML文件的示例
以下XML文件演示了使用多个XML文件为矢量图形制作动画的方法。

* VectorDrawable的XML文件: vd.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"android:height="64dp"android:width="64dp"android:viewportHeight="600"android:viewportWidth="600" ><groupandroid:name="rotationGroup"android:pivotX="300.0"android:pivotY="300.0"android:rotation="45.0" ><pathandroid:name="vectorPath"android:fillColor="#000000"android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" /></group>
</vector>
  • AnimatedVectorDrawable的XML文件: avd.xml

    <animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/vd" ><targetandroid:name="rotationGroup"android:animation="@anim/rotation" />
    </animated-vector>
  • AnimatedVectorDrawable的XML文件中使用的Animator XML文件: rotation.xml
    <objectAnimator
    android:duration="6000"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="360" />

    单个XML文件

    以下XML文件演示了使用单个XML文件为矢量图形制作动画的方法。在构建应用程序时, aapt标记会创建单独的资源并在动画矢量中引用它们。这种方法需要构建工具24或更高版本,并且输出是向后兼容的。

使用支持库的单个XML文件的示例

<animated-vectorxmlns:android="http://schemas.android.com/apk/res/android"xmlns:aapt="http://schemas.android.com/aapt"><aapt:attr name="android:drawable"><vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="64dp"android:height="64dp"android:viewportWidth="600"android:viewportHeight="600"><groupandroid:name="rotationGroup"android:pivotX="300"android:pivotY="300"android:roation="45.0" ><pathandroid:name="vectorPath"android:fillColor="#000000"android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" /></group></vector></aapt:attr><target android:name="rotationGroup"><aapt:attr name="android:animation"><objectAnimatorandroid:propertyName="rotation"android:valueFrom="0"android:valueTo="360"android:duration="6000"android:interpolator="@android:interpolator/fast_out_slow_in" /></aapt:attr></target>
</animated-vector>

联系我

QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公众号推荐:

图片和图形之矢量绘制(Vector drawables)(3)

转载于:https://blog.51cto.com/4789781/2120424

这篇关于图片和图形之矢量绘制(Vector drawables)(3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/231612

相关文章

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图