Android开发艺术探索读书笔记系列
Drawable是一个抽象类,它有众多子类如ShapeDrawable BitmapDrawable等. 它有一个重要的参数是内部宽高,通过getIntrinsicWidth
和getIntrinsicHeight
获取! 内部大小不等于它的大小,一般来说Drawable没有大小,当其作为View的背景时,Drawable会被拉伸至View的同等大小!
Drawable的分类及层次关系
BitmapDrawable
它表示一张图片,实际开发中可以直接引用图片,也可以通过XML的方式描述,这种方式可以实现更多效果,它有众多属性:
- android:src 图片资源id
- android:antialias 是否开启抗锯齿
- android:dither 是否开启抖动效果
- android:filter 是否开启过滤效果
- android:mipMap 纹理映射
- android:tileMode 平铺模式
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_test"
android:antialias="true"
android:dither="true"
android:filter="true"
android:gravity="center"
android:tileMode="mirror"
/>
NinePatchDrawable
NinePatchDrawable表示一张.9格式的图片,各属性和BitmapDrawable一样!
ShapeDrawable
ShapeDrawable可以理解为一种用颜色来构造的图形, 语法比较复杂,其子节点有corners、gradient、padding、size、solid、stroke
, 它有一个属性shape有四个选项:rectangle(矩形)、oval(椭圆)、line(线)、ring(圆环)
, 默认是矩形,当其值是line或ring时必须要有子节点stroke
来指定线的宽度和颜色,否则无效!
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadius="100dp"
android:shape="ring"
android:antialias="true"
android:useLevel="false">
<!--设置渐变色和solid不能共存-->
<gradient
android:endColor="@color/colorPrimary"
android:centerColor="#000"
android:type="sweep"
android:startColor="#fff" />
<size
android:width="300dp"
android:height="300dp" />
<st