如何使用android的vectordrawable类绘制矢量图

局长大人 2024-06-06 18:55:11
最佳回答
1. 创建vector drawable从相似角度来看,vectordrawable与标准svg图形都是利用path值绘制完成的。不过如何利用svg path绘制图形并不在本篇文章的探讨范围之内,大家可以点击此处从w3c网站处获取必要的说明资料。在本文当中,我们只需要了解到path标签的作用是进行图形绘制即可。让我们首先从svg文件入手,看看以下图形是如何被绘制出来的:这一图形共由五个主要部分所组成:一个圆角四边形作为cpu主体,该四边形由两条拱状弧线构成。四组各自包含五根线条的图形,用于充当cpu的外延线路。虽然看起来有点繁杂,但大家其实用不着纠结于以上代码的具体含义,而且这完全不会影响到我们接下来要进行的vectordrawable绘制工作。不过需要强调的是,我将前面提到的五大图形组成部分在代码中作为独立的区块来处理,这是为了增强代码内容的可读性。首先,我们需要利用两条拱形弧线来绘制出圆角四边形,而在接下来的内容中我们会探讨如何分别表现出上、下、左、右四个方位的外延线条。为了将上述svg代码转化为vectordrawable,大家首先需要在xml当中定义vector对象。以下代码提取自本篇文章示例代码当中的vector_drawable_cpu.xml文件。<vector xmlns:android="" android:height="64dp" android:width="64dp" android:viewportheight="600" android:viewportwidth="600" > </vector> 在此之后,大家可以向其中添加path数据。下列代码同样被拆分成了五个不同的path标签而非将其作为整体处理,这当然也是为了保证内容的可读性。正如大家所见,每个path片段都只需要利用pathdata属性进行绘制。现在我们可以将vectordrawable xml文件作为一个可绘制对象纳入到标准imageview当中,而且其能够根据应用程序的实际需要任意进行尺寸缩放——完全不需要再修改任何j**a代码。2. 为vector drawables添加动画效果现在我们已经了解了如何以纯代码方式创建图形,接下来要做的是找点乐子——为其添加动画效果。在以下动画中,大家会发现作为延伸线路的各组线条会不断指向并远离cpu本体进行移动。为了达到这一目标,大家需要将包含动画效果的每个片段包含在一个<group>标签当中。 接下来,我们需要为每个动画类型创建animato**件。在本次示例中,每组线路各使用一个animator,这就意味着共需要四个animator。以下代码所示为上方线路的动画效果,大家还需要为下、左、右线路设定类似的效果。每个animator xml文件都被包含在了本项目的示例代码当中。如大家所见,propertyname被设定为translatey,这意味着该动画将沿y轴方向移动。而valuefrom与valueto则控制着位移的起点与终点。通过将repeatmode设置为reverse而repeatcount设置为infinite,整个动画会一直循环下去,其效果则在vectordrawable处体现出来。该动画的duration被设定为250,其时长单位为毫秒。为了将该动画应用到自己的可绘制文件当中,大家需要创建一个新的animated-vector xml文件,从而将这些animator分配给各vectordrawable组。以下代码的作用是创建该animated_cpu.xml文件。<?xml version="1.0" encoding="utf-8"?> <animated-vector xmlns:android="" android:drawable="@drawable/vector_drawable_cpu"> <target android:animation="@animator/pulse_top" android:name="top" /> <target android:animation="@animator/pulse_right" android:name="right" /> <target android:animation="@animator/pulse_left" android:name="left" /> <target android:animation="@animator/pulse_bottom" android:name="bottom" /> </animated-vector> 当所有必要的xml文件都已经准备完成后,大家就可以将animated_cpu.xml加入到imageview当中进行显示了。<imageview android:id="@+id/cpu" android:layout_width="64dp" android:layout_height="64dp" android:src="@drawable/animated_cpu" /> 要开始播放动画效果,大家需要从imageview当中获取animatable实例并调用start。 imageview mcpuimageview = (imageview) findviewbyid( r.id.cpu ); drawable drawable = mcpuimageview.getdrawable(); if (drawable instanceof animatable) { ((animatable) drawable).start(); } 在start被调用之后,cpu图形当中的线路图形就会开始移动——整个过程只需要使用少量j**a代码即可实现。3. vector drawables的变化方式对于vectordrawable来说,最常见的一种使用方式就是将一个图形转化至另一个图形,例如操作栏中的图标由汉堡变成箭头。要做到这一点,源与目标path二者都必须具备同样的格式以保证元素数量上的一致。在本次示例中,我们将如前文图片所示尝试将左箭头转化为右箭头。<string name="left_arrow">m300,70 l 0,70 -70,-70 0,0 70,-70z</string> <string name="right_arrow">m300,70 l 0,-70 70,70 0,0 -70,70z</string> 接下来,大家需要利用path为left_arrow建立一个初始drawable。在示例代码中,我们将其命名为vector_drawable_left_arrow.xml。<vector xmlns:android="" android:height="64dp" android:width="64dp" android:viewportheight="600" android:viewportwidth="600" > <path android:name="left_arrow" android:fillcolor="#000000" android:pathdata="@string/left_arrow"/> /vector> cpu动画与这里提到的图形变化示例之间,最主要的区别就体现在animator_left_right_arrow.xml文件当中。<?xml version="1.0" encoding="utf-8"?> <set xmlns:android=""> <objectanimator android:duration="1000" android:propertyname="pathdata" android:valuefrom="@string/left_arrow" android:valueto="@string/right_arrow" android:valuetype="pathtype" android:repeatmode="reverse" android:repeatcount="-1"/> </set> 大家可能已经注意到了,valuefrom与valueto两项属性会引用左箭头与右箭头的path数据,valuetype被设定为pathtype而propertyname则被设定为pathdata。当以上设定完成之后,该animator将明确如何将一组path数据转化为另一组。当该animator结束之后,我们还需要利用新的animated-vector对象将vectordrawable分配至objectanimator。 <?xml version="1.0" encoding="utf-8"?> <animated-vector xmlns:android="" android:drawable="@drawable/vector_drawable_left_arrow"> <target android:name="left_arrow" android:animation="@animator/animator_left_right_arrows" /> </animated-vector> 最后,大家还需要将该动画drawable分配至imageview,而后在自己的j**a代码中开始运行。 <imageview android:id="@+id/left_right_arrow" android:layout_width="64dp" android:layout_height="64dp" android:layout_below="@+id/cpu" android:src="@drawable/animated_arrow" /> marrowimageview = (imageview) findviewbyid( r.id.left_right_arrow ); drawable = marrowimageview.getdrawable(); if (drawable instanceof animatable) { ((animatable) drawable).start(); } 20210311
汇率兑换计算器

类似问答
  • 城市热力图是如何绘制的?有哪些应用价值?
    • 2024-06-06 01:54:11
    • 提问者: 未知
    我们只知道红色是人口密集 绿色稀疏,那各色块代表的人数是? 即多大的区域达到多少人口才会变红色?多少人是绿色? 有大概范围吗?…
  • 如何用word绘制显示层次关系的组织结构图?
    • 2024-06-06 04:20:49
    • 提问者: 未知
    1新建一个word文档,点击下面的回旋状图标,即插入组织结构图。2在弹出窗口中选择第一个,用于显示层次关系的组织结构图,点击确定。3选择插入后的组织图中的一个框,点击右上角的工具中的插入形状。4即在下方又插入了一个框。5多次点击插入形状,会出现多个框,表示这个框里的内容有多个下层关系。6如果每个二层框都有下层关系,那么按上述插入即可。end6本页面未经许可获取自百度经验
  • ps是否能绘制矢量图和ai矢量图有什么区别?
    • 2024-06-06 14:12:49
    • 提问者: 未知
    矢量图形格式也很多,如adobe illustrator的*.ai、*.eps和svg、autocad的*.dwg和dxf、corel draw的*.cdr、windows标准图元文件*.wmf和增强型图元文件*.emf等等。...
  • cdr怎样绘制救生圈矢量图形
    • 2024-06-06 11:39:02
    • 提问者: 未知
    1打开cdr2用椭圆工具画出一个圆3增加轮廓宽度4点击上方菜单栏对象-造形-边界5然后按着右上角的黑色小方块,往中心移动6同样设置轮廓宽度为47用基本形状画出一个梯形,连接两个圆8共放四个9最后将全部梯形填充为黑色即可end
  • ai如何绘制好看的创意图案?
    • 2024-06-06 07:05:13
    • 提问者: 未知
    1双击运行ai软件,并新建一个空白画板;2使用“多边形工具”绘制一个正六边形,填充色为无,描边色为黑色;3依次执行“效果”-“扭曲和变换”-“变换”操作;4进入变换效果设置卡,将缩放设置为97%,旋转设置为4度,副本设置为35,点击确定;5调出渐变窗口,将描边色设置为好看的渐变颜色;6最后,调整图案的尖角幅度,使角度圆滑,这样一个好看的创意图案就绘制好了!end6此文章未经许可获取自百度经验
  • 如何用excel绘制区间图?
    • 2024-06-06 16:41:44
    • 提问者: 未知
    [图片] 如图,这种区间图如何用excel绘制?
  • 如何用autocad快速绘制厂区平面示意图?
    • 2024-06-06 10:26:34
    • 提问者: 未知
    1下载并安装软件autocad.在此小编建议下载**版的,因为正式版的需要注册码等等的很麻烦。版本不用太高,我们以2007版的为例。2打开autocad2007.打开autocad2007,选择运行程序,点击。然后会出现工作空间的界面,选择autocad经典模式,会出现一个新功能专题练习的对话框,任意选择,在此小编选择以后再说略过即可。之后我们的cad就打开了,可以开始绘制厂区平面示意图了。3实地...
  • spss中如何绘制箱图
    • 2024-06-06 19:11:44
    • 提问者: 未知
    p>我们使用spss软件分析数据的时候,经常需要运用箱图来展示数据走势。那么如何在spss中绘制箱图呢?下面小编给大家分享一下。div>...
  • android 怎么自定义绘制如下图中这种进度条
    • 2024-06-06 19:04:51
    • 提问者: 未知
    下面是安卓学习手册中实现各种进度条的截图: 要想看各种进度条的实现代码和文档,直接去360手机助手中下载安卓学习手册,例子文档随便看。1、说明 在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度。一个...
  • 如何使用自定义数据进行k线绘制和自定义指标绘制
    • 2024-06-06 02:06:07
    • 提问者: 未知
    举个实例,一看就明白#这个例子,fun1/fun2/fun3相当于有三个指标是你自定义的,通过这个办法可以绘制出来,里面的addbbands()是自带的指标,可以把这四个指标一起绘制出来。#参数x可以是个哑元,在一个实例文件里,fun1/fun2/fun3可以直接处理全局变量。我就是这么做的,不用把一个大数组传参。fun1 <- function(x){# your logicreturn(...
汇率兑换计算器

热门推荐
热门问答
最新问答
推荐问答
新手帮助
常见问题
房贷计算器-九子财经 | 备案号: 桂ICP备19010581号-1 商务联系 企鹅:2790-680461

特别声明:本网为公益网站,人人都可发布,所有内容为会员自行上传发布",本站不承担任何法律责任,如内容有该作者著作权或违规内容,请联系我们清空删除。