Drawable总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haoyuegongzi/article/details/80149713

一、Drawable简介
它是一个抽象类,分很多种,但都表示一种图形图像的概念,他有很多的子类,如shapeDrawable、bitmapDrawable等,因此它不是简单的图片,可以构造各种各样的图形效果。既可以通过xml来定义,也可以通过代码来动态定义。
Drawable有两个重要的参数:内部宽/高,可以通过getIntrinsicWidth/ getIntrinsicHeight获得。但不是所有的Drawable对象都有这两个参数,比如以颜色构成的Drawable对象就没有,而以一张图片形成的Drawable就有对应的内部宽高。
二、Drawable的分类
Drawable的常见子类:shapeDrawable、BtmapDrawable、LayerDrawable、StateListDrawable等。

1、BtmapDrawable
最简单的Drawable,表示的几乎就是一张图片。这时我们既可以直接应用原始图片实现效果,又可以通过xml来实现。后者可实现更丰富的效果。

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/zero03"    
    android:dither="true"              
    android:filter="true"               
    android:gravity="center"        
    android:mipMap="false"
    android:tileMode="clamp"/>

src:资源ID,不多说;
antialias:是否开启抗锯齿功能,但这个功能比较弱;
dither:是否开启抖动效果当图片像素配置RGB8888与手机屏幕像素配置RGB555不一致时,开启这个功能提高显
示效果。Android中创建bitmap对象一般用RGB8888模式;
filter:是否开启过滤效果,另外图片尺寸被压缩或者拉伸时,开启这个效果,可以较好的避免图片显示失真;
gravity:图片显示在屏幕上的位置;
mipMap:一种图像处理技术,也叫纹理映射,比较抽象,不多说;
tileMode:平铺模式,就跟Windows系统桌面图片的平铺模式(平铺,拉伸,适应,居中,跨区,填充等)一样
disable表示关闭平铺,是默认值,当开启平铺模式后,gravity属性失效;
repeat:简单的水平和垂直方向上的平铺;
mirror:水平和垂直方向上的镜面投影效果;
clamp:图片周围的像素会拉伸到周围区域。

2、ShapeDrawable

通俗的讲,就是定义View比如TextView,Button等点击事件的点击效果。主要涉及到以下属性:
Shape:rectangle(矩形)、oval(椭圆)、line(直线)、ring(圆环);
Solid:填充属性,只有color颜色这一个属性;
Corners:圆角,定义View四个角的圆角大小:leftRadius、topRadius、righRadius、bottomRadius;

Gradient:渐变属性,与solid属性相互排斥,有如下几个子属性:

     Angle:渐变角度,默认为0,值必须为45的倍数,0表示从左到右,90表示从上到下。
     CenterX/Y:渐变中心点坐标;         startColor:起始渐变颜色;
     endColor:结束渐变颜色;           centerColor:渐变的中心色;
     gradienRadius:渐变半径,仅type=radial时有效;
     useLevel:默认false,作为stateListDrawable时须true;
     type:渐变类别,有linear(线性)、radial(径向)、sweep(扫描)三个旋转。

Stroke:描边属性,有以下几个子项:

Width:描边宽度;         
color:描边颜色;
dashWidth:描边虚线宽度;   
dashGap:描边虚线段间距,它与dashWidth任何一个为0,虚线效果失效。

Padding:内间距,这个不多说;
Size:shape的大小,有width和height两个属性。

这里在多介绍下shape = ring时的属性情况:

android:innerRadius:内环的半径
android:innerRadiusRatio:浮点型,以环的宽度比率来表示内环的半径,默认为3,表示内环半径为环的宽度除
以3,该值会被android:innerRadius覆盖
android:thickness:环的厚度
android:thicknessRatio:浮点型,以环的宽度比率来表示环的厚度,默认为9,表示环的厚度为环的宽度除以9,
该值会被android:thickness覆盖
android:useLevel:一般为false,否则可能环形无法显示,只有作为LevelListDrawable使用时才设为true

下面是一个旋转的ring,可以作为刷新的动画配合ProgressBar使用。

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"     
    android:pivotX="50%"
    android:toDegrees="1080.0">
  <shape
        android:innerRadiusRatio="3"        
        android:shape="ring"
        android:useLevel="false">
      <gradient
            android:endColor="#2F90BD"  
            android:startColor="#FFFFFF" 
            android:type="sweep" />
    </shape>
</rotate>

下面是一个静态的扫描状的ring(stroke属性其实可以不用):

<shape xmlns:android=http://schemas.android.com/apk/res/android
   android:innerRadiusRatio="3"        
   android:shape="ring"
    android:useLevel="false">

    <gradient
        android:endColor="#2F90BD"   
        android:type="sweep"/>

    <stroke
        android:width="1dp"        
        android:color="#2F90BD" />
</shape>

3、StateListDrawable

用于设置View点击事件时的不同状态下不同效果的控制。

<!-- 当前窗口失去焦点时 -->  
<item android:drawable="@drawable/bg_btn_lost_window_focused"  android:state_window_focused="false"/>
<!-- 不可用时 -->       
<item android:drawable="@drawable/bg_btn_disable"  android:state_enabled="false"/>
<!-- 按压时 -->        
<item android:drawable="@drawable/bg_btn_pressed"  android:state_pressed="true"/>
<!-- 被选中时 -->       
<item android:drawable="@drawable/bg_btn_selected"  android:state_selected="true"/>
<!-- 被激活时 -->       
<item android:drawable="@drawable/bg_btn_activated"  android:state_activated="true"/>
<!-- 默认时 -->        
<item android:drawable="@drawable/bg_btn_normal"/>

其他的Drawable子类用的很少,在此不详细介绍。

猜你喜欢

转载自blog.csdn.net/haoyuegongzi/article/details/80149713