《Andorid开发艺术探索第六章》-Drawable
来源:互联网 发布:北京恩知教育 编辑:程序博客网 时间:2024/05/16 19:25
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 //渐变 android: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篇
- 《Andorid开发艺术探索第六章》-Drawable
- 第六章Andorid的Drawable(Android开发艺术探索)
- Android 开发艺术探索笔记 第六章 Android的Drawable
- 开发艺术探索-- Drawable
- 《Andorid开发艺术探索第七章》-动画
- Android开发艺术探索第六章——Android的Drawable
- Android开发艺术-第六章Drawable读书笔记
- Android开发艺术探索-Drawable
- Android开发艺术探索 第六章 第七章
- 第七章Andorid动画深入分析(Android开发艺术探索)
- Andorid开发艺术探索读书笔记--Android四大组件
- 《Android开发艺术探索》读书笔记 (6) 第6章 Android的Drawable
- 【读书笔记】【Android 开发艺术探索】第 6 章 Android 的 Drawable
- 读书笔记:Android开发艺术探索之第6章 android的Drawable
- Android开发艺术探索<Drawable系列之一BitmapDrawable>
- Android开发艺术探索<Drawable系列之二ShapeDrawable>
- Android开发艺术探索<Drawable系列之三LayerDrawable>
- Android开发艺术探索<Drawable系列之四StateListDrawable >
- PCB设计
- Genymotion常见问题解决办法
- margin 杜瑶博客笔记
- Java 堆和栈的区别
- 【HDU5813】Elegant Construction(贪心)
- 《Andorid开发艺术探索第六章》-Drawable
- HDOJ 1004 Let the Balloon Rise
- http 之session和cookie
- 字符串排序
- 本地化处理
- 各种分布的python例子
- POJ 2949 Word Rings(差分约束)
- Linux之分区
- pom中引入新依赖项后项目启动报错问题研究