安卓中使用xml来实现Drawable可绘制对象
之前对于安卓中的图形绘制一直只会使用简单的图片来使用,对于使用xml中通过各种标签绘制来实现的绘制一脸懵逼。
现在需要使用进度条功能,从网上看到的xml配置实现,才开始了解这一块,官网文档说明很多很清晰:
https://developer.android.google.cn/guide/topics/resources/drawable-resource
截取自己实践的示例来记录一下:
selector
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/layer_drawable"/>
以上为选择器会根据空间的不同状态来使用不同的图片作为背景。
layer-list
图层列表
<ProgressBar android:layout_width="match_parent" android:layout_height="20dp" android:progressDrawable="@drawable/progress_bar" android:id="@+id/progress_bar" android:indeterminateOnly="false" />
indeterminateOnly 这个配置起到了进度条按照条装显示,而不是转圈,默认转圈的。
种类很多,参考官网使用。
VectorDrawable
安卓矢量图的使用,参考官网:
https://developer.android.google.cn/reference/android/graphics/drawable/VectorDrawable
使用矢量图的优点:
图片扩展性:它可以进行缩放并且不损失图片的质量,这意味着使用同一个文件对不同屏幕密度调整大小并不损失图片的质量;
图片大小小:同样大小和内容图片下相比,矢量图比PNG图片更小,这样就能得到更小的APK文件和更少的维护工作;
然而,系统渲染VectorDrawable需要花费更多时间。因为矢量图的初始化加载会比相应的光栅图片消耗更多的CPU周期,但是两者之间的内存消耗和性能接近。因此我们可以只考虑在显示小图片的时候使用矢量图(建议你限制矢量图在200*200dp),越大的图片在屏幕上显示会消耗更长的时间进行绘制;
在Android studio中已经有工具可以将图片转换为矢量图:
生成的xml代码如下:
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#0E0E0E" android:viewportHeight="24.0" android:viewportWidth="24.0" android:width="24dp" > <path android:fillColor="#FF000000" android:pathData="M6,18c0,0.55 0.45,1 1,1h1v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L11,19h2v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L16,19h1c0.55,0 1,-0.45 1,-1L18,8L6,8v10zM3.5,8C2.67,8 2,8.67 2,9.5v7c0,0.83 0.67,1.5 1.5,1.5S5,17.33 5,16.5v-7C5,8.67 4.33,8 3.5,8zM20.5,8c-0.83,0 -1.5,0.67 -1.5,1.5v7c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5v-7c0,-0.83 -0.67,-1.5 -1.5,-1.5zM15.53,2.16l1.3,-1.3c0.2,-0.2 0.2,-0.51 0,-0.71 -0.2,-0.2 -0.51,-0.2 -0.71,0l-1.48,1.48C13.85,1.23 12.95,1 12,1c-0.96,0 -1.86,0.23 -2.66,0.63L7.85,0.15c-0.2,-0.2 -0.51,-0.2 -0.71,0 -0.2,0.2 -0.2,0.51 0,0.71l1.31,1.31C6.97,3.26 6,5.01 6,7h12c0,-1.99 -0.97,-3.75 -2.47,-4.84zM10,5L9,5L9,4h1v1zM15,5h-1L14,4h1v1z"/> </vector>