安卓开发中矢量图的绘制及动画

安卓开发中矢量图的绘制及动画,第1张

矢量图也称为面向对象的图像或绘图图像,是根据几何特性来绘制的图形,在安卓开发中可以使用失量图代替原来的图片资源,矢量图具有占用空间小和可以随意缩放但不失真的优势,在我的多个项目中都有运用。

通过学习和实践,我总结了一些与矢量图相关的知识,方便今后更好的使用矢量图,同时也可以供大家查阅参考。

绘制矢量图之前需要先定义画布的宽高,后续的绘制效果都展示在这个画布上。在绘制过程中需要输入的坐标就是这个画布上的点。

安卓的矢量图常见于 drawable 文件夹下,是一个xml文件,由 vector 标签包裹,在 vector 标签中可包含多个 path 标签,依次叠加显示。

在矢量图中最重要的就是 path 属性,图像的样式就是由 path 属性中的数据绘制而成,这些数据由不同的命令组合而成,下面就介绍一些矢量图的绘制命令。

将前面的命令示例连接起来就可以生成一个完整的图像,它大概长这个样子:

画布的尺寸为500x500,图上的顶点是200,10的位置,也是我们开始作图的起点。通过这个图片可以更好的理解每一个绘图命令。

安卓中可以为矢量图添加动画效果,这样用户就可以看到一个动的图片,可以一定程度的提高app的交互效果。矢量图动画是图形内部的变化,可以做到View动画无法实现的效果。

这种动画针对的是矢量图中 path 字段的值,通过连续改变 path 字段的值而达到产生动画的效果。

注:pathData动画所需的AnimatedVectorDrawable最低要求API等级为25

实现一个矢量图动画需要以下几步:

1. 准备起始状态和结束状态的矢量图两张。

2. 创建动画配置文件。

3. 创建动画矢量图文件。

4. 启动动画。

基于这种要求,我准备了两个矢量图:

控制动画运行的是一个 objectAnimator ,此处把 objectAnimator 包裹在一个 set 中也是可以的,说白了就是执行这个动画文件。

duration 用来指定动画的持续时间。

propertyName 中的pathData指的就是矢量图中的pathData。

valueFrom 和 valueTo 一个是起始路径,一个是结束路径,可以想到,这个动画就是在持续修改pathData,从而达到展示动画的效果。而 valueFrom 和 valueTo 的值是直接从先前准备的矢量图中复制过来的,所以那个结束状态的矢量图中唯一有用的东西就是pathData属性,没有那个文件也无所谓。

valueType 这里必须填写pathType,这是专门用来计算path的类型。

此时,文件的最外层由 animated-vector 包裹,同时需要添加一个 drawable 参数,这个 drawable 用于指定动画应用于那个矢量图上,我们是要从未启用状态变成启用状态,所以是在未启用状态开始执行动画,在动画未开始的时候展示的也是未启用状态。此处我们指定为 @drawable/icon_filter_off 。

内部有一个 target 标签,这个标签可以有多个,分别对应不同的动画,但同一个 path 只能应用一个动画。

name 用于指定要执行动画的 path 。status正是我们为右下角小图标path设置的名称。

animation 用于指定需要执行的动画。此处引用我们刚刚创建的动画资源 @animator/filter_turn_on 。

当我们创建好动画矢量图之后,页面中引用的资源就不再是之前的静态矢量图了,需要把 ImageView 的图片替换成 @drawable/animated_filter_on

经过这么多的步骤,我们终于做出了一个矢量图动画,而且是一个。说实话,有点累,然而我这个状态切换的动画一套就要两个,所以我又加了一个回来的动画和对应的动画矢量图,一共六个文件,完成了筛选状态的两个切换动画。这还是比较简单的实现方式,对于两种状态切换的动画,网上还有一种使用selector的方式,这种方式更麻烦,而且使用方法并没有简单一些,所以我的选择是在需要切换状态的时候更改 ImageView 的图片资源,然后再执行动画。

trimPath动画相当于是改变了矢量图绘制的位置,是从头开始画还是从80%的位置开始画,然后再动态的修改这个百分比,从而达到动画的效果。理解起来倒不是很难。

先放一个我使用trimPath动画做的loading效果,这个动画效果被我用在LoadingDialog中,在界面加载的时候会重复播放这个动画。

android:name="load" 不用多说,这个是我们做动画时路径名称。这里为了让心电图路径更清晰,我设置了描边宽度为20( android:strokeWidth="20" ),同时还要设置描边的颜色才能展示出来。后面的 android:trimPathStart="0" 和 android:trimPathEnd="0" 是本次trimPath动画的重点。

这两个属性都设置为0是因为动画的起始帧都为0,然后通过 objectAnimator 慢慢把这两个属性变为1,这样一个慢慢增长的动画就形成了。

网络上一个横线变成搜索按钮的示例是将这两个属性分别应用到了两个 path 上,而我是将两个属性同时应用到一个 path 上,原理都是一样的。

在配置文件中,我将两个动画都设置为3秒且循环播放,起始点的动画慢于终点的动画1秒,达到只画中间1秒间隔线段的效果。和路径变形动画的区别是 android:valueType="floatType" ,我们只需要计算从0到1的数字,然后应用到 trimPathStart 和 trimPathEnd 字段上。至此,loading的动画就配置完了。

这一步已经没什么可说的了,就是将指定的矢量图中指定的路径设置一个指定的动画。

通过几天的学习,已经大致掌握了矢量图的展示及动画的制作,但这一套流程下来成本比较高,是程序员方式的动画制作流程。除了制作成本,创意成本也是相当高的,一个好的创意能极大的提升用户体验,而好多时候我们的创意能够被实现也是很困难的。希望以后能实现一些更好的效果,让用户使用起来更舒服。

SVG—最简单的SVG动画

SVG路径(path)中的圆弧(A)指令的语法说明及计算逻辑

Android中的矢量图

Android高级动画(2)

ActionScript,通常简称为AS,是Flash平台的copy100语言。作为程序,可以编译成SWF、SWC。SWF就是我们所说的Flash动画。但是现在SWF不仅仅是一个动画,而是RIA的一个载体。ActionScript有三个版本:1.0(AS1)、2.0(AS2)和3.0(AS3)。

只有FlashPlayer9及以上支持as3编译的SWF。这三个版本非常不同,现在最新的版本是AS3。所以as3程序员做的是flash开发,而不是flash设计。

扩展资料:

命名技巧

最好使用与所有者和相关项对应的包名。按照惯例,包名应该以反向url名开头。

例如:如果ExampleCorp(examplecorp.com)编写了一些ActionScript3.0类,所有这些类都将放在com中。examplecorp包(或com.examplecorp的子包)。

这样,如果英国有另一个ExampleCorp(ExampleCorp.co.UK),它也编写了一些ActionScript3.0类,您可以通过简单地使用包UK.co.ExampleCorp来确保唯一性。

当类是特定应用程序的一部分时,应该将它们放在特定于应用程序的子包中例如:ExampleCorp可能有一个名为WidgetStore的应用程序。

如果WidgetStore应用程序使用一个名为ApplicationManager的类,那么这个类应该在com.examplecorp中。或者在该包的子包中。

通常,包名以小写字母开头。

[隐式获取方法(getter)和设置方法(setter)]

public函数getcount():uint{

Return_count;

Publicfunctionsetcount(值:uint):uint{

If(值<100){

_count=价值;

其他}{

ThrowError();

交互动画是指在动画作品播放时支持事件响应和交互功能的一种动画,也就是说,动画播放时可以接受某种控制。这种控制可以是动画播放者的某种 *** 作,也可以是在动画制作时预先准备的 *** 作。这种交互性提供了观众参与和控制动画播放内容的手段,使观众由被动接受变为主动选择。最典型的交互式动画就是FLASH动画。观看者可以用鼠标或键盘对动画的播放进行控制。Flash是由macromedia公司推出的交互式矢量图和 Web 动画的标准,由Adobe公司收购。网页设计者使用Flash 创作出既漂亮又可改变尺寸的导航界面以及其他奇特的效果。Flash也是存储芯片的一种,通过特定的程序可以修改里面的数据。Flash的前身是Future Wave公司的Future Splash,是世界上第一个商用的二维矢量动画软件,用于设计和编辑Flash文档。1996年11月,美国Macromedia公司收购了Future Wave,并将其改名为Flash。在出到Flash 8以后, Macromedia又被Adobe公司收购。Flash通常也指 Macromedia

Flash Player(现Adobe FlashPlayer)。其它辅助工具:photoshop,flex, illustrator等。序列帧如果过多过大容易照成一瞬间的加载卡顿现象,十分影响用户体验;序列帧过多会影响应用的包体大小,而许多渠道对包体大小都是有或多或少限制的。总结:如果仅仅是一些元素的位移,缩放,旋转,淡入淡出这类简单的动画,强烈建议由美术提供基础元素,程序实现具体动画。至于其它类型的动画就得视情况而定了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11344335.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存