赞
踩
阿里巴巴图片库:https://www.iconfont.cn/collections/detail?cid=9638
但是在android中是不支持svg代码,具体教程可查看W3school:https://www.w3school.com.cn/svg/index.asp
- <svg class="icon"
- height="100"
- p-id="2332"
- t="1621585217711"
- version="1.1"
- viewBox="0 0 1024 1024"
- width="100"
- xmlns="http://www.w3.org/2000/svg">
- <path
- d="M519.37694695 3.190031l0 861.30841098L439.62616795 864.49844201 439.62616795 3.190031l79.750779 0z"
- fill="#337ab7"
- p-id="2333"></path>
- <path
- d="M599.12772595 823.028037L481.09657295 1024l-121.221184-200.971963 239.252337 0z"
- fill="#337ab7"
- p-id="2334"></path>
- </svg>

说到矢量图,顺便讲下Vector,在Android中指的是Vector Drawable,也就是Android中的矢量图,可以说Vector就是Android中的SVG实现(并不是支持全部的SVG语法,现已支持的完全足够用了),其实svg格式再android studio的显示就是转为Vector
总结来看,如果是特定的icon图标或者一些不复杂的地方,使用SVG会更好
放几张图对比下:以下2张图片,分别是分别率为1024x1024的png和svg的图片,明显svg格式的图片大小不png小的多的多
以下图片是设置同样宽高的svg和png的2张图片,明显png格式的图片已经变得模糊了
对于大家minSDK19的开发习惯来说,还是有一些限制的,那怎么做像下兼容呢,这就涉及到了支持库,从AppCompat23.2开始,Google开始支持在低版本上使用Vector。(所谓的兼容也是个坑爹的兼容,即低版本非真实使用SVG,而是生成PNG图片)
API查看网址:https://developer.android.google.cn/reference/android/graphics/drawable/VectorDrawable?hl=en
对于5.0之前的兼容,同样用的是VectorDrawable,兼容需要做到以下几点:
1.Android Plugin for Gradle 2.0 or higher
2.在项目的gradle文件中添加兼容库依赖23.2.0以上
- dependencies {
- compile 'com.android.support:appcompat-v7:23.2.0'
- }
3.还需要打开一个兼容vectorDrawables的开关
- android {
- defaultConfig {
- vectorDrawables.useSupportLibrary = true
- }
- }
完成以上3步,即可开始创建Vector了
注意:
a:如果我们没有设置 vectorDrawables.useSupportLibrary = true 的话,则在build项目的时候,gradle会为vcetor创建不同分辨率下的png序列,即预栅格化我们的vector为真正的png图片并会被加入到apk中,无形中增加了apk的大小。这也是官方提到的另一种vector向后兼容的一种方式,如果对性能要求高的,对apk大小要求不高的,可以用这种方式,毕竟手机在将vector栅格化的时候需要一些时间,比直接加载png的费时。下图为gradle自动将vector转化为不同分辨率的
以上的这个实在设置minSdkVersion 21 即最小兼容版本小于5.0以下时,未设置vectorDrawables.useSupportLibrary = true 出现的效果,在21以上不需要设置
b:在适配的最低版本小于5.0时,在没有设置vectorDrawables.useSupportLibrary = true时,调用和平常的png等的调用方式相同, 但是会将cector的图片转为png存在各个尺寸的drawable里)
平常设置图片的方式有哪些呢:https://blog.csdn.net/u012693479/article/details/78211550
c:在测试的过程中,发现当适配的最低版本小于5.0时,运行在5.0以下的手机,且设置了vectorDrawables.useSupportLibrary = true时,在布局里不能用android:background和android:src 否则会奔溃,setImageResource可以正常使用,其他平常设置图片的方法不能正常使用
,如果是5.0以上的手机则都是正常的调用
其中Clip Art代表选择android studio自带的 Vector Drawale图片,Local file(SVG,PSD)代表加载本地存在的SVG,PSD格式的图片,将其转化为xml放于drawable文件中
【Clip Art(剪切图)】
Name:xml文件名称
Clip Art:可以选择AS自带的图标
Size:设置矢量图的大小
Color:设置矢量图的颜色
Opacity:设置不透明度
Enable auto mirroring for RTL layout:为RTL布局启用自动镜像
详细描述RTL模式:https://blog.csdn.net/NoMasp/article/details/52074538
这些是android Studio自带的Vector Drawale图片,搜索框盘边的2个选项分别为,左一:每个图标的不同类型,最右边:筛选不同类型的图标
【Local file(本地SVG文件或者PSD文件)】
Name:xml文件名称
Size:设置矢量图的大小
Opacity:设置不透明度
Enable auto mirroring for RTL layout:为RTL布局启用自动镜像
Path:选择本地矢量图(比如svg图片)
从本地导入上面预留好的svg文件,如下:
最上边的箭头,引进来的SVG格式图片会转为xml格式,在drawable包下显示
- <vector xmlns:android="http://schemas.android.com/apk/res/android"
-
- android:width="100dp"
- android:height="100dp"
- android:viewportWidth="1024"
- android:viewportHeight="1024">
- <path
- android:pathData="M519.38,3.19l0,861.31L439.63,864.5 439.63,3.19l79.75,0z"
- android:fillColor="#337ab7" />
- <path
- android:pathData="M599.13,823.03L481.1,1024l-121.22,-200.97 239.25,0z"
- android:fillColor="#337ab7"/>
- </vector>
1:最低版本设置为5.0以上
调用方式和普调的图片一样
2:如果项目最低的版本要求是在5.0以下
a: 则不要在xml里用android:background这个来调用vector的图片,否则app运行在5.0以下是会奔溃的,5.0以上不会
b:Activity需继承AppCompatActivity,则可在布局中用ImageView,不是的话需用android.support.v7.widget.AppCompatImageView.
加上xmlns:app=”http://schemas.android.com/apk/res-auto”,再将drawable设置到app:srcCompat如下:
- <ImageView
- android:layout_width="100dp"
- android:layout_height="100dp"
- app:srcCompat="@drawable/ic_baseline_access_alarm_24" />
Java代码设置 mImageView.setImageResource(R.drawable.ic_baseline_access_alarm_24);
c:转成Drawable使用
图片有时是需要转成Drawable来使用,如TextView中的Drawable.为了兼容Android L以下版本,需要按照以下方法进行转换.
VectorDrawableCompat vectorDrawableCompat = VectorDrawableCompat.create(getResources(), R.drawable.ic_baseline_backspace_24, null);
- static {
- AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
- }
Drawable drawable = ContextCompat.getDrawable(this,R.drawable.ic_baseline_backspace_24);
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);的方法描述解释了如何兼容AndroidL下版本使用SVG与注意事项.
建议使用第一种方法,较灵活.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。