背景
App很多页面都要显示一些图标,我们也经常使用@drawable直接引用图标,但是Android提供更多对drawable进行定义的方式,让显示更加多样化,下面将一一对这些技术进行介绍。


总览
绘图资源(Drawable Resources)是一种让Graphic绘制到屏幕的资源,在Android中能通过getDrawable(int)获取该资源,又或者通过@drawable获取,这些资源包括:

Bitmap File
位图(.png、.jpg、.gif格式)。

Nine-Patch File
.9图(.9.png格式),在Android环境下可自适应显示。

还有Layer List、State List、Transition Drawable、Inset Drawable、Clip Drawable、Scale Drawable、Shape Drawable等将在下文慢慢介绍。

另外要注意的是,颜色也是一种绘图资源,(android:drawable="@color/green").


Bitmap File
这个就是直接引用一个位图文件,不作多介绍。

Resources res = getResources();Drawable drawable = res.getDrawable(R.drawable.myimage);



XML Bitmap
此文件定义在res/drawable/ 文件夹下,在xml标签下对位图文件进行一系列定义,然后显示出来。
android:antialias 是否抗锯齿
android:dither 是否抗抖动(位图像素配置与屏幕不一致时会出现抖动)
android:filter 是否允许位图拉伸时缓慢地过渡
android:mipMap 是否使用mipMap优化,相关请查阅
android:tileMode 选择平铺、对称、拉伸显示

<?xml version="1.0" encoding="utf-8"?>
1.jpg



Nine-Patch
这个有很多相关文章介绍,提供下面两图,相信大家能理解。


2.jpg



XML Nine-Patch
跟上面的XML Bitmap一样,使用xml标签对.9.png进行定义显示。不过它除了设置引用的.9.png外,就只能设置android:dither抗抖动问题。

<?xml version="1.0" encoding="utf-8"?>



Layer List
这里通过xml标签可以做成一个多个位图重叠drawable,可设置每个item(即对应位图)的边距。

<?xml version="1.0" encoding="utf-8"?>    
4.jpg



State List
这个即我们经常使用的button按钮的状态selector,这个应用不用过多介绍,不同的状态对应不用的图片或则下面即将介绍的shape。

<?xml version="1.0" encoding="utf-8"?>                    



Level List
不太理解,后面再看。

<?xml version="1.0" encoding="utf-8"?>        



Transition Drawable
可变的drawalbe,比如下面例子,通过获取ImageButton的drawable,调用startTransition方法,即可实现transition下的item的切换。可实现场景比如开关按钮,可实现渐变,也就是说你点击该按钮后,可以渐变该图标的背景、形状。

<?xml version="1.0" encoding="utf-8"?>        
ImageButton button = (ImageButton) findViewById(R.id.button);TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();drawable.startTransition(500);



Inset Drawable
可设置该drawable的shape、color、位图的内边距,我把它应用在ListView的divider上,代码与效果图如下:

<?xml version="1.0" encoding="utf-8"?>                
5.jpg



Clip Drawable
类似显示进度的Drawable,可设置横向还是纵向。

<?xml version="1.0" encoding="utf-8"?>
ImageView imageview = (ImageView) findViewById(R.id.image);ClipDrawable drawable = (ClipDrawable) imageview.getBackground();drawable.setLevel(drawable.getLevel() + 1000);
屏幕快照 2017-08-10 下午6.43.14.png

Scale Drawable
理解了,但是运行没效果,后面有效果再写。


Shape Drawable
它比较牛逼的地方是可像color、位图一样,在以上item定义中作为个内嵌元素,因为它可设置诸多属性,所以导致Drawable Resources更加多变,我觉得需要另外写一篇文章来解析它。

<?xml version="1.0" encoding="utf-8"?>                        

更多相关文章

  1. android自定义ViewGroup基础
  2. Android使用xml自定义软键盘效果(附源码)
  3. 深入探索 Android(安卓)包体积优化(匠心制作二)
  4. Android类库打包方法探究
  5. [Android] Android自定义对话框(Dialog)位置,大小
  6. android 自定义view 前的基础知识
  7. 美化你的android程序:自定义ListView背景
  8. Android(安卓)应用开发支持不同的语言国际化操作
  9. 创建和使用library

随机推荐

  1. Android(安卓)Logcat和Debug的使用
  2. Android引用第三方jar的问题
  3. PopWindow与ListView多选实现
  4. Android内容提供者之读取联系人信息
  5. Android(安卓)Activity 生命周期(lifecycl
  6. Android实现淘宝倒计时功能
  7. Android(安卓)The connection to adb is
  8. Android(安卓)Studio用法之ListView(图文
  9. (Android、Java) AES加密方法
  10. Android(安卓)添加动画的标签栏