您的位置:首页 > 其它

《Andorid开发艺术探索第六章》-Drawable

2016-08-10 13:00 211 查看
http://blog.csdn.net/guolin_blog/article/details/44171115

http://hujiaweibujidao.github.io/blog/2015/11/30/Art-of-Android-Development-Reading-Notes-6/

http://blog.csdn.net/lmj623565791/article/details/45022631

Drawable简介

Drawable的分类

自定义Drawable

Drawable简介

Drawable的内部宽/高这个参数比较重要,通过
getIntrinsicWIdth
getIntrinsicHeight
这两个方法可以获取到它们,而图片和颜色所形成的Drawable则不可以这样计算

Drawable的分类

* BItmapDrawable和NinepatchDrawable*

<?xml version="1.0" encoding="utf-8"?>
<bitmap / nine-patch
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@[package:]drawable/drawable_resource"
android:antialias=["true" | "false"]
android:dither=["true" | "false"]
android:filter=["true" | "false"]
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]
android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />


android:antialias
是否开启图片抗锯齿功能,开启后会让图片变得平滑,同时也会在一定程度上降低图片的清晰度,应该开启。

android:dither
是否开启抖动,当图片的像素配置和手机屏幕的像素配置不一致时,开启这个选项可以让高质量的图片在低质量的屏幕上还能保持较好的显示效果。建议开启

android:filter
是否开启过滤效果。当图片尺寸被拉伸或者压缩时,开启过滤效果可以保持较好的显示效果。建议开启。

android:tileMode
平铺模式。有如下几个值:
["disabled"|"clamp"|"repeat"|"mirror"|]
,其中disable表好关闭平铺模式,这也是默认值。

repeat表示简单的水平和竖直方向上的平铺模效果。

mirror表示一种在水平和竖直方向上的镜面投影效果

clamp表示图片第四周的效果会扩展到周围区域

NinePatchDrawable和BitmaoDrawable一样

2. ShapeDrawable

<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle" | "oval" | "line" | "ring"] >
<corners        //当shape为rectangle时使用
android:radius="integer"        //半径值会被后面的单个半径属性覆盖,默认为1dp
android:topLeftRadius="integer"
android:topRightRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer" />
<gradient       //渐变
andr
bf7d
oid:angle="integer"
android:centerX="integer"
android:centerY="integer"
android:centerColor="integer"
android:endColor="color"
android:gradientRadius="integer"
android:startColor="color"
android:type=["linear" | "radial" | "sweep"]
android:useLevel=["true" | "false"] />
<padding        //内边距
android:left="integer"
android:top="integer"
android:right="integer"
android:bottom="integer" />
<size           //指定大小,一般用在imageview配合scaleType属性使用
android:width="integer"
android:height="integer" />
<solid          //填充颜色
android:color="color" />
<stroke         //边框
android:width="integer"
android:color="color"
android:dashWidth="integer"
android:dashGap="integer" />
</shape>


其实体实际上是GradientDrawable


andorid:shape
表示图片的形状:有四个选项:rectangle(矩形)、oval(椭圆)、line(横线)、ring(圆环)

corners
表示shape的四个角的角度,只适用于矩形shape

<gradient>
表示渐变效果,其中渐变的角度默认为0

<solid>
表示纯色填充

<stoke>
表示描边,其中abdroud:dashWidth和android:dashGap有任何一个为0,那么虚线效果将不能生效。

3. LayerDrawable

<layer_list>
...
<item
andorid:drawable = "@[package:]drawable/drawable_resource"
ahdroid=...
...
>
</layer - list>


Layer-list有层次的概念,下面的item会覆盖上面的item.通过合理的分层,可以实现一些特殊的叠加效果。

4. StateListDrawable

StateListDrawable对应于
<selecor>
标签,主要永固设置可单击的View的背景。一般来说默认的irem都应该放在selector的最后一条并且不附带任何状态。

5.* LevelListDrawable*

对应于
<level-list>
标签,同样表示一个Drawable集合,集合中的每个Drawable都有一个等级(level)概念。(
Drawable的等级是由范围的,即0~10000,最小的等级是0,这也是默认值,最大等级是10000


6. TransitionDrawable

TransitionDrawable对应于
<transition>
标签,它用于实现两个Drawable之间的淡入淡出效果。

7. InsetDrawable

对应于
<inset>
标签,它可以将其他Drawable内嵌到自己当中,并可以给四周留出一定的间距。

8. ScaleDrawable

对应于
<scale>
标签,它可以根据自己的等级将指定的Drawable缩放到一定的比例。默认情况下:
等级对于ScaleDrawable的影响,等级为0表示ScaleDrawable不可见,这是默认值。
要让它使用等级不能等于0.等级越高,缩放比例越大

9. ClipDrawable

可以根据自己当前的等级来裁剪另一个Deawable,裁剪的方向可以通过android:clipOrientation和android:gravity这两个属性来共同控制

<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:clipOrientation="vertical"
android:drawable="@drawable/image1"
android:gravity="bottom" />


自定义Drawable

Drawable的工作原理核心是Draw方法,其中
setAlpha
setColorFilter
getOpactity
是必须实现的

Drawable的内部大小不等于Drawable的实际区域大小,Drawable的实际区域大小可以通过它的getBounds方法来得到,一般来说它和view的尺寸相同。

参考: Android Drawable 那些不为人知的高效用法

Android样式的开发:shape篇

Android样式的开发:layer-list篇

Android样式的开发:selector篇

Android样式的开发:drawable汇总篇

Android样式的开发:Style篇
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: