前言
          SVG,全名Scalable Vector Graphics可伸缩矢量图形,这种图像格式在前端已经是非常广泛了 ,矢量图像: SVG是W3C退出的一种开放标准的文本格式的矢量图形描述语言,他也是基于XML的、专门为网络而设计的图像格式,SVG是一种采用XML来描述而为图形的语言,所以它可以直接打开xml文件来修改和编辑位图图像: 位图图像的存储单位是图像上每一点的像素值,因而文件会比较大,像GIF、JPEG、PNG等都是位图图像格式

SVG的语法
                M = moveto(M X,Y) :将画笔移动到指定的坐标位置,相当于 android Path 里的moveTo()
                L = lineto(L X,Y) :画直线到指定的坐标位置,相当于 android Path 里的lineTo()
                H = horizontal lineto(H X):画水平线到指定的X坐标位置
                V = vertical lineto(V Y):画垂直线到指定的Y坐标位置
                C = curveto(C X1,Y1,X2,Y2,ENDX,ENDY):三次贝赛曲线
                S = smooth curveto(S X2,Y2,ENDX,ENDY) 同样三次贝塞尔曲线,更平滑
                Q = quadratic Belzier curve(Q X,Y,ENDX,ENDY):二次贝赛曲线
                T = smooth quadratic Belzier curveto(T ENDX,ENDY):映射 同样二次贝塞尔曲线,更平滑
                A = elliptical Arc(A RX,RY,XROTATION,FLAG1,FLAG2,X,Y):弧线 ,相当于arcTo()
                Z = closepath():关闭路径(会自动绘制链接起点和终点)

Part 1、基本用法
          Vector在Android中指代的是Vector Drawable,也就是Android中的矢量图。Vector图像刚发布的时候,只支持Android5.0+的,自从AppCompat 23.2之后,Vector可以使用于Android2.1以上的所有系统,只需要引用com.android.support:appcompat-v7:23.2.0以上的版本就可以了。但是这里的兼容并非真实的兼容,而是在低版本中生成PNG图片来替代SVG

<vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="200dp"android:height="200dp"android:viewportHeight="500"android:viewportWidth="500"><pathandroid:name="square"android:fillColor="#000000"android:pathData="M100,100 L400,100 L400,400 L100,400 z"/></vector>

tips:

1、android:width/android:height : 矢量图形的大小

2、android:viewportwidth/android:viewportheight : 定义图像被划分的比例大小,例如例子中的500,即把200dp大小的图像划分成500份

Vector Drawable相对于普通的Drawable来说,有以下几个好处:
        (1)Vector图像可以自动进行适配,不需要通过分辨率来设置不同的图片。
        (2)Vector图像可以大幅减少图像的体积,同样一张图,用Vector来实现,可能只有PNG的几十分之一。
        (3)使用简单,很多设计工具,都可以直接导出SVG图像,从而转换成Vector图像 功能强大。

(4)不用写很多代码就可以实现非常复杂的动画 成熟、稳定,前端已经非常广泛的进行使用了。

下面推荐几个网址

SVG编辑器:http://editor.method.ac/

将SVG文件转化为VectorDrawable xml文件:http://inloop.github.io/svg2android/

众多SVG的图片:http://www.flaticon.com/

效果~

似乎看上去很简单,但当你要使用兼容矢量图的时候需要在build.gradle文件添加

//在gradle2.0及以上:
android {defaultConfig {vectorDrawables.useSupportLibrary = true
}}
//在gradle 1.5以前
android {defaultConfig {// Stops the Gradle plugin’s automatic rasterization of vectorsgeneratedDensities = []}// Flag to tell aapt to keep the attribute ids aroundaaptOptions {additionalParameters "--no-version-vectors"}
}

这里只能用于AppCompatImageView或者AppCompatImageButton或其子类,而且必须在app:srcCompat标签中,如果你要使用TextView、Button的话就会报错,需要将图片依附于StateListDrawable,InsetDrawable,LayerDrawable,LevelListDrawable,RotateDrawable进行显示

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/chick"/>
</selector>

在23.4.0之后需要手动开启

static {AppCompatDelegate.setCompatVectorFromSourcesEnabled(true);
}

这样便能在TextView、Button使用兼容的矢量图了

    <android.support.v7.widget.AppCompatTextViewandroid:layout_width="150dp"android:layout_height="150dp"android:drawableLeft="@drawable/chick"/>

接下来说一下VectorDrawable的性能问题:

1)当Vector比较简单时,其效率是一定比Bitmap高的,所以,为了保证Vector的高效率,Vector需要更加简单,PathData更加标准、精简,当Vector图像变得非常复杂时,就需要使用Bitmap来代替了
        2)Vector适用于ICON、Button、ImageView的图标等小的ICON,或者是需要的动画效果,由于Bitmap在GPU中有缓存功能,而Vector并没有,所以Vector图像不能做频繁的重绘
        3)Vector图像过于复杂时,不仅仅要注意绘制效率,初始化效率也是需要考虑的重要因素

Part 2、SVG的高级动画

效果~

tips:

1、画出相应图形

<vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="150dp"android:height="24dp"android:viewportHeight="24"android:viewportWidth="150"><pathandroid:name="search"android:pathData="M141,17 A9,9 0 1,1 142,16 L149,23"android:strokeAlpha="0.8"android:strokeColor="#00FF00"android:strokeLineCap="round"android:strokeWidth="4"/><pathandroid:name="bar"android:pathData="M0,23 L149,23"android:strokeAlpha="0.8"android:strokeColor="#7700FF00"android:strokeLineCap="square"android:strokeWidth="4"/>
</vector>

2、设置animated-vector动画

<animated-vectorxmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/searchbar"><targetandroid:name="search"android:animation="@animator/anim_searchbar_in"/><targetandroid:name="bar"android:animation="@animator/anim_searchbar_out"/></animated-vector>

这里target的name值指代着图形path的name值

3、为每个path设置动画

anim_searchbar_in

<objectAnimatorxmlns:android="http://schemas.android.com/apk/res/android"android:duration="1000"android:propertyName="trimPathStart"android:repeatCount="infinite"android:repeatMode="reverse"android:valueFrom="0"android:valueTo="1"android:valueType="floatType"/>

anim_searchbar_out

<objectAnimatorxmlns:android="http://schemas.android.com/apk/res/android"android:duration="1000"android:propertyName="trimPathStart"android:repeatCount="infinite"android:repeatMode="reverse"android:valueFrom="1"android:valueTo="0"android:valueType="floatType"/>

效果~

可以仿照上面来定义自己的SVG动画

效果~

tips:

1、定义图形

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"android:viewportWidth="400"android:viewportHeight="400"android:width="300px"android:height="300px"><group android:name="star_group"android:pivotX="200"android:pivotY="200"android:scaleX="1.0"android:scaleY="1.0"><pathandroid:name="star"android:fillColor="#FF00FF"android:pathData="M 200.30535,69.729172C 205.21044,69.729172 236.50709,141.52218 240.4754,144.40532C 244.4437,147.28846 322.39411,154.86809 323.90987,159.53312C 325.42562,164.19814 266.81761,216.14828 265.30186,220.81331C 263.7861,225.47833 280.66544,301.9558 276.69714,304.83894C 272.72883,307.72209 205.21044,268.03603 200.30534,268.03603C 195.40025,268.03603 127.88185,307.72208 123.91355,304.83894C 119.94524,301.9558 136.82459,225.47832 135.30883,220.8133C 133.79307,216.14828 75.185066,164.19813 76.700824,159.53311C 78.216581,154.86809 156.16699,147.28846 160.13529,144.40532C 164.1036,141.52218 195.40025,69.729172 200.30535,69.729172 z"/></group>
</vector>

这里的group标签的作用:1、对Path进行分组,由于我们后面需要针对Path进行动画,所以可以让具有同样动画效果的Path在同一个Group中。2、拓展动画效果,单个的path标签是没有translateX和translateY属性的,因此无法使用属性动画来控制path translateY,而group标签是有的,所以我们需要先将相关的path标签元素包裹在一个个的group标签中。

2、设置animated-vector动画

<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/vd_star" ><targetandroid:name="star_group"android:animation="@animator/star_rotate" /><targetandroid:name="star"android:animation="@animator/star_shap" />
</animated-vector>

矢量图形SVG高级动画相关推荐

  1. Android开发笔记(一百三十二)矢量图形与矢量动画

    矢量图形VectorDrawable 与水波图形RippleDrawable一样,矢量图形VectorDrawable也是Android5.0之后新增的图形类.矢量图不同于一般的图形,它是由一系列几何 ...

  2. svg html 鼠标滚轮交互,鼠标滚轮控制SVG线条动画

    之前用D3制作图表是初次接触SVG,当时只顾感叹D3的强大了.后来当看到网站 Serio Verify 的时候,才意识到SVG用于制作可交互的页面动画是多么有意思. 于是自己也尝试在HTML页面中制作 ...

  3. js svg语音波动动画_让动效更酷炫!4 个常见且常用的 SVG 交互动画方法

    本文介绍了 4 种常见的 SVG 交互动画方法,帮你了解 SVG 交互动画的原理和简单方法. 优秀的人机交互和舒适合理的动画,一直是 UX 设计师孜孜不倦追求的目标.但 UX 设计师每天都遇到能做出效 ...

  4. SwiftUI之深入解析高级动画的几何效果GeometryEffect

    一.前言 在我的博客 SwiftUI之深入解析高级动画的路径Paths 中,已经了解了 Animatable 的协议,以及如何使用它来动画路径.接下来,我们将使用相同的协议来动画变换矩阵,使用一个新的 ...

  5. SwiftUI之深入解析高级动画的路径Paths

    一.前言 本文将深入探讨一些创建 SwiftUI 动画的高级技术,讨论 Animatable 的协议,它可靠的伙伴 AnimatableData,强大但经常被忽略的 GeometryEffect 以及 ...

  6. tmemo 选择消除行_Divi模块,行和部分加入高级动画选项

    一切元素的动画选项每个Divi模块,行和部分都带有高级动画选项,你可以使用这些选项来吸引访问者并使页面更加耀眼.Divi引入一个全新的动画系统,并将这些高级动画选项扩展到每个Divi模块,行和部分!这 ...

  7. svg 动画_根据AI导出的SVG path制作SVG线条动画

    点击右上方红色按钮关注"web秀",让你真正秀起来 前言 首先祝大家2019新年快乐,万事大吉,猪事顺利,阖家欢乐. 前面文章SVG 线条动画基础入门知识学习到了基础知识,现在来给 ...

  8. yzmcms图片自适应代码_基于segment.js制作的非常有创意的分段式SVG文字动画特效...

    [温馨提示]源码包解压密码:www.youhutong.com 效果图: 描述说明: 要使用该SVG文字动画特效,要在页面中引入segment.js,它用于动画SVG路径,d3-ease,用于制作ea ...

  9. 怎么用class引入svg_让动效更酷炫!4 个常见且常用的 SVG 交互动画方法

    本文介绍了 4 种常见的 SVG 交互动画方法,帮你了解 SVG 交互动画的原理和简单方法. 优秀的人机交互和舒适合理的动画,一直是 UX 设计师孜孜不倦追求的目标.但 UX 设计师每天都遇到能做出效 ...

最新文章

  1. ibatis Clob对象处理
  2. linux令普通用户拥有root权限
  3. 【模板】线段树(区间加)
  4. Sass与Compress实战:第一章
  5. GPON介绍及华为OLT网关注册配置流程
  6. sum of digits
  7. 数据建模讲解和案例分析
  8. PPT 去除排练计时
  9. APP 兼容性测试是什么?8年测试老鸟告诉你
  10. AppData文件夹下Local,Locallow和Roaming
  11. idea设置author注解
  12. 古代物流是如何进行的?
  13. LTE网络中的无线安全的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. 机电信息杂志机电信息杂志社机电信息编辑部2022年第24期目录
  15. Server 2008改成个人习惯的配置
  16. 【实战】OceanBase之OMS迁移Oracle至oceanbase
  17. 日历(NSCalendar)
  18. Cesium画个雷达四凌锥体
  19. 博阅电纸书_博阅电纸书评测:轻松阅读的开始
  20. API Manager PHP 接口管理工具

热门文章

  1. 【SCI征稿】工程建筑材料数学类SCI,进展顺利,接收领域广
  2. 计算机管理没用调制解调器,想知道电脑上没有调制解调器怎么办
  3. python爬虫(爬取酷狗排行榜并保存到本地)
  4. nexus 5 刷机
  5. CTF.show:萌新专属红包题
  6. Golang rpc:service/method request ill-formed错误
  7. 鸿蒙系统怎么没有微信界面,如果没有微信,使用鸿蒙系统的华为会怎么样?
  8. 二本理科计算机专业大学,二本大学 理科 计算机排名
  9. 轻量级Typecho极简主题——Ltns【好久不见】
  10. 用 Rails 搭建微信公众平台 API