Android UI

Android SVG的使用

2018-03-04  本文已影响45人  feibix33

一、背景

由于android 碎片化严重,对于不同型号手机、不同屏幕分辨率的适配,就显得异常艰难了。一般的做法是切好几套分辨率的图来保证拉伸不会出现太大的问题,虽说多几套图可以基本解决适配的问题,但是会造成安装包的体积增大,同时一些不常见的设备上也容易出现变形的问题,Android Vector 的出现可以解决此问题。

二、什么是svg

注:svg目前在网页端被广泛的使用,android 中是通过什么来实现的呢 ?google 提供了VectorDrawable和AnimatedVectorDrawable两个类来实现svg ,也即是Vector 就是SVG 在android 中的实现,从android 5.0开始支持,google也从AppCompat23.2 版本提供了对低版本svg 的兼容。

svg更详细的介绍和用法请参照w3 School连接,请点我
Android vector 更细的介绍和用法请参照google网站api 请点我

三、矢量图和位图

位图:是由像素点组合而成的图像,一个点就是一个像素,每个点都有自己的颜色。位图和分辨率有着直接的联系,分辨率大的位图清晰度高,其放大倍数也相应增加。但是,当位图的放大倍数超过其最佳分辨率时,就会出现细节丢失,并产生锯齿状边缘的情况。像平时移动端用的比较多的png格式的图片就是位图

矢量图:是以数学向量方式记录图像的,其内容以线条和色块为主。矢量图和分辨率无关,它可以任意地放大且清晰度不变,也不会出现锯齿状边缘,本文要讲的svg就是矢量图

四、Android 使用svg 的优势和劣势

五、如何使用

1、语法

VectorDrawable 使用 <vector>元素在XML 中定义,代码如下

 <vector xmlns:android="http://schemas.android.com/apk/res/android"
     android:height="64dp"
     android:width="64dp"
     android:viewportHeight="600"
     android:viewportWidth="600" >
     <group
         android:name="rotationGroup"
         android:pivotX="300.0"
         android:pivotY="300.0"
         android:rotation="45.0" >
         <path
             android:name="v"
             android:fillColor="#000000"
             android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
     </group>
 </vector>

Vector属性

group

Path

clip-path

2、简单实例:

这里我们以网页 使用的svg图片来生成android 中的svg图片来说明,为什么不直接使用VectorDrawable 的元素及其属性来生成svg呢?
因为我们要使用上述讲解的各个元素及属性生成,是极其复杂的,作为程序员不应该把时间学浪费到上面,只需看懂即可
我们可以通过svg编辑软件生成svg图片,或者UI提供好的svg 图片转化为android 可以使用的格式,即在已有资源的基础上进行改进,效率会更高

1.将下面xml 代码用.svg的文件保存,命名为test.svg


<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<circle cx="50" cy="50" r="40" stroke="black"
stroke-width="2" fill="red"/>

</svg>

2.用支持svg的浏览器打开(如chrome)


test.png

3.转化为android 中可以使用的xml,这里使用到了android studio 中的Vector Asset ,如下图:


QQ截图20180301070923.png
4.选择Local file(SVG,PSD),设置本地路径,修改文件名、大小等即可将上述网页中使用的svg,转化为android 中使用的svg 图片
QQ截图20180301072015.png

5.转化后的svg代码如下:

<vector android:height="24dp" android:viewportHeight="100.0"
    android:viewportWidth="100.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#ff0000"
        android:pathData="M50,50m-40,0a40,40 0,1 1,80 0a40,40 0,1 1,-80 0"
        android:strokeColor="#000000" android:strokeWidth="2"/>
</vector>
  1. 布局文件和代码中使用vector 图片
ImageView iv = findViewById(R.id.iv);
iv.setImageResource(R.drawable.ic_test);

可以看出和位图 png 格式的图片使用基本一致~

3.动画

动画施工ing

六、结语

Vector的出现对开发者来说是一大福音,可能在某些低版本还是会存在兼容性问题,但我们可以尝试在一些不太重要的功能上先使用,积累经验,当某一天,我们不需要考虑低版本系统,或者低版本的兼容库已经做的非常强大的时候,或许svg 会替代目前使用的位图(png)也说不一定。

上一篇 下一篇

猜你喜欢

热点阅读