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

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的内部宽/高这个参数比较重要,通过getIntrinsicWIdthgetIntrinsicHeight这两个方法可以获取到它们,而图片和颜色所形成的Drawable则不可以这样计算

Drawable的分类

  1. * 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

  1. Drawable的工作原理核心是Draw方法,其中setAlphasetColorFiltergetOpactity是必须实现的
  2. Drawable的内部大小不等于Drawable的实际区域大小,Drawable的实际区域大小可以通过它的getBounds方法来得到,一般来说它和view的尺寸相同。

参考: Android Drawable 那些不为人知的高效用法
Android样式的开发:shape篇
Android样式的开发:layer-list篇
Android样式的开发:selector篇
Android样式的开发:drawable汇总篇
Android样式的开发:Style篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值