Android 使用SVG动画
2017-01-30 10:18
736 查看
SVG是指可伸缩矢量图形 (Scalable Vector Graphics),它不同于传统的位图,不是通过存储图像中每一点的像素值来保存与使用图形,而是通过 XML 文件来定义一个图形,通过一些特定的语法和规则来绘制出我们所需的图像——同样是使用一张图片,SVG 的方式是事先定义好怎么去画这个图,然后等要用的时候再把它去画出来,而使用传统的位图的话就是已经有了画出来的图,然后要用的时候直接把画好的图拿出来用。这样一来的话我们就很容易可以分析出它们两种方式之间的优劣之处:
SVG 是在要用图的时候再把图画出来,所以理所当然的在图片显示的时候会花费更多的时间消耗更多的资源,所以SVG 并不太适合层次过于复杂细节过于繁多的图片。
位图是事先已经画好的图片,所以适应性必然没有 SVG 好,同一张图片在不同分辨率下显示会有差异。
SVG 的文件里存储了绘制图片的相关信息,所以我们能够对图片的线条有一个非常清晰的感知,这在做动画的时候特别有用。
SVG 没有存储任何图像的像素信息,所以 SVG 的文件体积远小于传统的位图文件。
SVG 的文件画出来的图像是矢量图,所以不会存在失真的问题,理论上支持任何级别的缩放。
但是Android对于 SVG 的支持是从 Android L 开始的,它的 SDK 里面加入了 VectorDrawable , AnimatedVectorDrawable 等类帮助我们构建 SVG 图形以及动画,并且你可以在 xml 文件里面直接使用 <vector/> 标签绘制 SVG 图像以及 <animated-vector/> 标签为 SVG 图像分配动画。而且目前并没有官方的 support 包来帮助我们对运行着 Android L 之前的系统的设备做兼容,而在一些开源社区里一些人做的兼容包也都还没有那种比较完美的解决方案,总是会有一些问题——这意味着,如果不想将就的话,就只能等到市场上基本都是
Android L 或以上的设备的时候,才有可能在生产中大规模的全面的用 SVG 替换位图了。
lypeer大神使用SVG制作的谷歌风格时钟:
SVG基础知识学习
1.旋转的Android字母,源代码:
SVG 是在要用图的时候再把图画出来,所以理所当然的在图片显示的时候会花费更多的时间消耗更多的资源,所以SVG 并不太适合层次过于复杂细节过于繁多的图片。
位图是事先已经画好的图片,所以适应性必然没有 SVG 好,同一张图片在不同分辨率下显示会有差异。
SVG 的文件里存储了绘制图片的相关信息,所以我们能够对图片的线条有一个非常清晰的感知,这在做动画的时候特别有用。
SVG 没有存储任何图像的像素信息,所以 SVG 的文件体积远小于传统的位图文件。
SVG 的文件画出来的图像是矢量图,所以不会存在失真的问题,理论上支持任何级别的缩放。
但是Android对于 SVG 的支持是从 Android L 开始的,它的 SDK 里面加入了 VectorDrawable , AnimatedVectorDrawable 等类帮助我们构建 SVG 图形以及动画,并且你可以在 xml 文件里面直接使用 <vector/> 标签绘制 SVG 图像以及 <animated-vector/> 标签为 SVG 图像分配动画。而且目前并没有官方的 support 包来帮助我们对运行着 Android L 之前的系统的设备做兼容,而在一些开源社区里一些人做的兼容包也都还没有那种比较完美的解决方案,总是会有一些问题——这意味着,如果不想将就的话,就只能等到市场上基本都是
Android L 或以上的设备的时候,才有可能在生产中大规模的全面的用 SVG 替换位图了。
lypeer大神使用SVG制作的谷歌风格时钟:
SVG基础知识学习
1.旋转的Android字母,源代码:
<svg width="500" height="500" xmlns="http://www.w3.org/2000/svg"> <g transform="rotate(291 160 160)"> <text font-family="microsoft yahei" font-size="80" y="160" x="160">Android</text> <animatetransform attributename="transform" begin="0s" dur="5s" type="rotate" from="0 160 160" to="360 160 160" repeatcount="indefinite"> </animatetransform> </g> </svg>
相关文章推荐
- Android编程之通知栏的用法小结
- Android编程实现调用系统图库与裁剪图片功能
- Android开发入门——推箱子游戏开发实战(十三)
- Android中bindService的细节之四:bindService时,你所忽略的代码流程细节
- 关于Android Matrix pre post 的理解
- Mac 连不上华为 p9 处理历程(一)
- Mac 连不上华为 p9 处理历程(二)
- Android中事件处理机制之——View的事件分发详解(一)
- Android轮播广告
- 专制各种升级失败:纯手工刷入Android L步骤,100%成功!
- Android 工具类 -->文件压缩
- SharedSDK(一):Android SharedSDK使用步骤
- Android进阶之路 - IntentService的使用方式
- Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索——1.2 GPGPU解决方案简述
- Android 如何收集已发布程序的崩溃信息
- 优雅的实现多类型列表的Adapter
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——5.8 使用MediaPlayer播放在线视频
- 底部导航BottomNavigationBar的使用
- android_104_Animation
- 【Android】Android中的ListView