安卓客户端使用矢量图
目录
概述
什么是矢量图
使用矢量图节省内存开销原理
矢量图内存占用实测
使用矢量图
安卓客户端支持矢量图格式
什么样的位图图片适合转换成矢量图
兼容低版本使用矢量
概述
在android客户端使用矢量图,可以节省内存开销。
什么是矢量图
矢量图,称为绘图图像,定义为一系列由线连接的点。按照path 路径绘制出来,写像素无关,可以将它缩放到任意大小和以任意分辨率在输出设备上打印出来,都不会影响清晰度。
使用矢量图节省内存开销原理
项目中使用的 png webp jpg 等位图,显示在屏幕上,消耗的内存与像素素有关。通过getResource().getDrawable(R.drawable.pic) 获取的 Drawable对象为BitmapDrawable类型。
矢量图是通过canvs对象,通过path标签中的路径数据,直接绘制出来的。它与像素无关,与shape标签一样,几乎是不消耗什么内存的。
矢量图内存占用实测
使用几张矢量图,VectorDrawable对象占用内存如下,都不超过1KB。
使用矢量图
使用vector标签的xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="80dp"android:height="48dp"android:viewportWidth="80"android:viewportHeight="48"><pathandroid:fillAlpha="0.51"android:fillColor="#f00"android:pathData="M21.33,0L58.64,0C69.56,1.34 78.64,10.42 80,21.34L80,26.66C78.64,37.57 69.58,46.63 58.68,48L21.34,48C10.44,46.64 1.37,37.58 0,26.68L0,21.34C1.35,10.43 10.43,1.36 21.33,0M19.45,2.58C10.68,4.33 3.52,11.96 2.33,20.82C0.84,29.99 5.98,39.69 14.37,43.66C19.78,46.49 26.05,45.96 31.95,46C40.33,45.93 48.71,46.15 57.09,45.88C66.2,45.53 74.62,38.89 77.03,30.08C79.46,22.15 76.74,13.02 70.5,7.6C65.8,3.29 59.28,1.72 53.03,2C41.85,2.31 30.58,1.34 19.45,2.58Z"android:strokeAlpha="0.51" /><pathandroid:fillAlpha="0.51"android:fillColor="#f00"android:pathData="M24.78,11.49C25.73,10.42 26.67,9.35 27.62,8.29C31.71,12.47 35.86,16.58 40,20.71C44.16,16.57 48.3,12.43 52.43,8.27C53.35,9.35 54.28,10.43 55.2,11.51C51.03,15.41 47.14,19.6 42.98,23.5C46.87,27.85 51.21,31.77 55.23,35.99C54.29,37 53.34,38 52.39,38.99C48.26,34.9 44.23,30.7 40.01,26.69C35.96,30.43 32.26,34.51 28.27,38.29C26.75,40.07 25.49,37.14 24.28,36.41C28.42,32.2 32.78,28.17 36.77,23.82C33.36,19.32 28.75,15.59 24.78,11.49Z"android:strokeAlpha="0.51" />
</vector>
与调用png 位图一样,可在xml中直接引用
安卓客户端支持矢量图格式
矢量图有很多格式,svg ai psd 等,但是安卓并不能直接使用,AppCompatImageView 使用 app:srcCompat 属性可以加载。
安卓原生从5.0系统开始支持 vector标签的矢量图,我们将png图片转换成svg psd等格式,再转成vector Asset。如上图,转换成vector标签的xml文件,可以直接放在drawable资源文件下
什么样的位图图片适合转换成矢量图
项目本地图片中小图片,图标等一般都适合使用矢量图。
色彩、图形较简单的图片适合转换成矢量图,复杂的图案不适合转换成矢量图。正常来说,UI在做完设计图后,提交到蓝湖等UI管理项目,开发者从项目中下载图片资源,选择矢量图格式,能下载到的矢量图都是适合使用矢量图的图片,其余图片下载位图格式的图片。
如果项目是老项目,想将位图转换成矢量图,可以将项目中所有图片复制出来,剔除重名的图片,按图片文件大小排列,关注一下前面的大图片,挑选出不适合转换成矢量图的图片,将剩下的小图片批量转换成矢量图。
兼容低版本使用矢量
安卓原生从5.0系统开始支持 vector标签的矢量图,通过在build.gralde中配置就可以支持api7及以上,基本上可以解决问题
android {defaultConfig {vectorDrawables.useSupportLibrary = true}}
引用其它作者的文章:https://blog.csdn.net/z_x_Qiang/article/details/77978874
备注:
1)如果项目的minSdkVersion<21 (5.0),且未如上兼容设置,生成的apk文件中,矢量图会被移动 drawable-anydpi-v21 文件夹下面,同时会在 不同的drawable- 路径文件夹下面生成对应的png图片,这样会导致apk文件增加。这样处理的是 api 21及以上使用矢量图,在21以下使用对应的png图片,这些png图片是由studio编译时自动生成的。当使用兼容处理后就不会再生成png图片了。相同级别drawable 目录下如果有同名的位图,则不会在该目录下再自动生成对应的png图片。
2)系统调用规律
当安卓项目中有同名的图片,有矢量图和位图,例如有 矢量图 a.xml和位图a.png 两张图片,系统会优先使用矢量图。如果如上设置了兼容低版本使用矢量图,由不允许在同目录下面使用同名的图,即 a.xml和a.png是不允许在一个目录下同时使用,否则会报资源重复问题。
在生成的apk中,矢量图并不会替代其它dpi目录中的同名文件,矢量图是可以任意缩放的,所以,凡是使用了矢量图, 其它 dpi目录下的同名图片可以选择手动删除,它们的存在已经没有实际意义,反而会增加apk体积。
F&A
1. 5.0以下版本在xml中需要使用 app:srcCompat 来加载矢量图,否则不显示。
2. 创建的选择器、list-layer等标签下,如果有 android:drawable 标签,也是不能使用矢量图的,这是因为5.0以下系统的 drwable标签是不能识别 矢量图的,如果用了,会崩溃。
安卓客户端使用矢量图相关推荐
- typora 浏览器预览_今日软件 | 造画、夸克浏览器、完美解码、Process Lasso、第三方微博客户端、专业矢量图/图像编辑工具...
今日软件更新 安卓APP 「Share」3.5.1 # 第三方微博客户端 ▾下载:https://lanzous.com/ictvdlg 「夸克浏览器」4.1.2.133 # 轻快简洁的浏览器 ▾下载 ...
- Android——SVG图片转成安卓能用的vector矢量图
背景 矢量图能不受显示范围大小的限制且不失真,不需要放多套PNG图片来做适配,能随意自己更改矢量图的大小而不再需要去求同事给新切图. 而我目前所在的公司出图放在蓝湖上,能选择下载PNG或SVG格式的图 ...
- flutter笔记5:官方资料搬运-安卓客户端打包
上一篇,使用material原生控件完成了人生的一个用flutter开发的APP,这两天为了理解flutter,翻了很多资料,信息量太大,烧了不少脑子,今天这篇就简单点,实战走一下安卓客户端的打包流程 ...
- python画矢量图_使用基于matplotlib的SciencePlots绘制精美图表
开源项目地址:https://github.com/garrettj403/SciencePlots 安装这个包,需要输入魔法: pip install SciencePlots 例如绘制如下函数,导 ...
- SVG - 在Android中使用矢量图全攻略
概念 什么是矢量图,SVG SVG全称:可伸缩矢量图形 (Scalable Vector Graphics) SVG 用来定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像 ...
- android 矢量图形文件,Android Studio进行APP设计开发之矢量图及XML文件转换
Android Studio进行APP设计开发之矢量图及XML文件转换 当我们使用Android studio进行APP设计开发时,会用到矢量图,那么要将矢量图运用到安卓工程drawable中去,就需 ...
- android博客导航总结,以及个人常用android免费学习干货(文章,视频,矢量图,字体等)资源分享?
android博客导航总结与资源分享 1.博客总结 1.mob平台的使用 2.QMUI部分功能实现 3.XUI部分功能实现 4.其他功能 5.Flutter博客总结: 2.资源分享 1.文章类型资源分 ...
- VectorDrawable矢量图
AndroidL中有一个非常好的新特性是VectorDrawable以及相关的一些类,他们为我们提供了添加复杂矢量图形的强大功能,同时也提供了动画显示这些图形的方法,不用写很多代码就可以实现非常复杂的 ...
- iconfont 图标转为字体_阿里巴巴Iconfont矢量图转为字体图标的方法
我们在做网站时,网站里会有很多的小图标,通常这些小图标会使用小图片来制作,但修改起来比较麻烦.所以现在很多网站都使用字体图片来制作小图标. 今天学做网站论坛介绍一下阿里巴巴Iconfont矢量图转为字 ...
- 将.ai文件矢量图转化为.xml文件并在Android项目中使用
写在前面的话 笔者最近在做一个安卓的小项目,在开发的过程中,发现经常需要使用图标类的矢量图.下面我将详细叙述如何将从网络上下载的ai文件内的图标转化为xml文件并在Android项目中使用该图标. 使 ...
最新文章
- Netty入门教程——认识Netty
- 老程序员的经验和价值在哪里
- iOS - PassData
- Windows server 2003域下全局组、本地域组及通用组之间的关系详解
- [Protobuf] Mac系统下安装配置及简单使用
- python中怎么表示整数的点称为整点_智慧职教云课堂APPPython程序设计基础答案公众号...
- 【MySQL】Linux端-实现Mysql数据定时自动备份
- 我的世界怎么设置服务器维护中,我的世界服务器
- windows + cmake + vs2019 编程
- iOS 随笔 允许所有不安全网络访问项目
- issues:close 云端 STS 启动报找不到 jdk
- Vue组件化之VueComponent介绍
- PHP通过反射获得类源码
- c语言汉诺塔问题详解
- matlab图像模糊处理
- 高可靠性——TSN (Time Sensitive Network 时间敏感网络) 802.1Qci 协议介绍
- Java书店管理系统
- 数据库缓存服务——Redis(企业级)
- ad7606驱动及仿真
- 签个到,哎,下午的数值计算可以考的好点的。。。。忧桑。。。
热门文章
- knockoutjs与ajax,MVVM架构~knockoutjs系列之为Ajax传递Ko数组对象
- 如何利用Pix2Pix将黑白图片自动变成彩色图片
- ArcGIS Pro地图制图之符号化和地图标注
- 启动pe系统找不到计算机硬盘分区,pe系统看不到硬盘分区_pe系统里看不到硬盘...
- 猴子都能看懂的A星算法原理
- 2.aop原理:@EnableAspectJAutoProxy
- 全国所有省份行政区域名标准(全国省份2字母拼音缩写标准参考)
- centos7下载php7.4
- 【自然语言处理】论述自然语言处理的技术范畴
- 关于软件工程的目的与意义