美文网首页
Android里面常用的Drawable的使用

Android里面常用的Drawable的使用

作者: 雾里看花六月天 | 来源:发表于2017-11-05 20:01 被阅读90次

    一、ShapeDrawable:
    通过颜色来构造图形,既可以为纯色图形,也可以为具有渐变效果的图形。能构成的图形有rectangle、oval、ring、line
    1.示例:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:innerRadius="100dp"
     android:shape="ring"
     android:thickness="10dp"
     android:useLevel="false" >
     <stroke
      android:width="10dp"
      android:color="@color/colorAccent" />
    </shape>
    

    2.里面属性的介绍:

    • android:shape 要绘制的形状,rectangle、oval、ring、line
    • <stroke> 形状的描边,有如下属性
      - android:width 描边的宽度
      - android:color 描边的颜色
      - android:dashGap 绘制虚线的线宽
      - android:dashWidth 绘制虚线的线段间隔 (要绘制虚线,后两者均不能为0)
      -<solid> 纯色填充,android:color指定shape颜色
    • <gradient> 渐变效果,与solid不可一起用,有如下属性
      - android:angle 渐变的角度,必须为45的倍数
      - android:startColor 渐变的起始颜色
      - android:centerColor 渐变的中间颜色
      - android:endColor 渐变的结束颜色
      - android:centerX 渐变的中心点横坐标
      - android:centerY 渐变的中心点纵坐标
      - android:gradientRadius 渐变半径
      - android:type 渐变类型,linear(线性)、sweep(扫视)、radial(径向)
    • <corners> 表示矩形(rectangle)的四个角的角度,不适用于其他shape ,有如下属性
      - android:topLeftRadius、android:topRightRadius、android:bottomLeftRadius、android:bottomRightRadius 分别为设置左上角、右上角、左下角、右下角的角度
      - android:radius 为四角设置相同角度,优先级低,会被其他四个属性覆盖
    • <size> shape的宽高,对应着android:width、android:height
      - shape默认无宽高,getIntrinsicHeight、getIntrinsicWidth返回-1
      - 通过size可以设置其宽高,但作为view背景时任然会被拉伸或缩小为 view大小
    • <padding> 设置容纳shape的view的空白间距

    二、StateListDrawable:
    可以看作是一个状态选择器,通过view不同的状态选择对应的item中的drawable显示
    1.示例:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:drawable="@color/colorPrimaryDark" android:state_pressed="false"></item>
     <item android:drawable="@color/colorAccent" android:state_pressed="true"></item>
    </selector>
    

    2.常见状态:
    android:state_pressed 当按住一个view时,按下的状态
    android:state_checked 当一个view被选中时,适用于CheckBox
    android:state_selected 当一个view被选择时
    android:state_enabled 当一个view处于可用状态
    android:state_focused 当view获取焦点

    三、LayerDeawable:
    表示的是一种分层的的Drawable集合,类似于ps中的图层的概念,将多个drawable放在不同的层上面形成一种叠加的效果
    1.示例:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:drawable="@mipmap/night" />
     <item
      android:drawable="@mipmap/photo6"
      android:gravity="center" />
    </layer-list>
    

    2.常用事项:

    1、layer-list可以包含多个item,每个item表示一个drawable,并且后添加的item会覆盖到之前添加的item上面
    2、默认情况下,layer-list所有的drawable都会缩放至view大大小,通过设施android:gravity可以调节缩放的效果
    3、可以设置上下左右偏移量,android:top、android:bottom、android:left、android:right

    四、LevelListDrawable:

    表示一个drawable集合,集合中的每一个Drawable都有一个等级(level),通过设置不同的等级,可以使LevelListDrawable切换至不同的Drawable。等级范围在0~10000之间, android:maxLevel设置最大level, android:minLevel设置最小level
    1.示例:

    <?xml version="1.0" encoding="utf-8"?>
    <level-list xmlns:android="http://schemas.android.com/apk/res/android">
     <item
      android:drawable="@mipmap/photo0"
      android:maxLevel="20"
      android:minLevel="10" />
     <item
      android:drawable="@mipmap/photo1"
      android:maxLevel="40"
      android:minLevel="30" />
    </level-list>
    

    2.通过设置level可切换不同的Drawable,在代码中:

    //将ImageView的背景切换为photo1, 35 在30~40之间
    iv.setImageLevel(35); 
    //将ImageView的背景切换为photo0, 15在10~20之间
    iv.setImageLevel(15);
    

    五、InsetDrawable:
    嵌入其他Drawable,并可以在四周保留一定的间距
    1.示例:

    <?xml version="1.0" encoding="utf-8"?>
    <inset xmlns:android="http://schemas.android.com/apk/res/android"
     android:drawable="@mipmap/photo6"
     android:inset="20dp">
    </inset>
    

    六、ClipDrawable:
    根据自己的等级(level)来对另一个Drawable进行裁剪,裁剪的方向由android:clipOrientation、android:gravity共同决定。设置level进行裁剪,level的大小从0到10000,level为0时完全不显示,为10000时完全显示 :
    1.示例:

    <?xml version="1.0" encoding="utf-8"?>
    <clip xmlns:android="http://schemas.android.com/apk/res/android"
     android:clipOrientation="horizontal"
     android:drawable="@mipmap/night"
     android:gravity="right"></clip>
    

    2.用法:

    <ImageView
     android:id="@+id/iv_clip"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:src="@drawable/drawable_clip" />
    

    通过设置level来裁剪:

    ImageView iv = (ImageView) findViewById(R.id.iv_clip);
    ClipDrawable drawable= (ClipDrawable) iv.getDrawable();
    drawable.setLevel(5000); // 设置的level越大裁剪的范围越小
    

    android:clipOrientation ,horizontal 水平方向裁剪,vertical 垂直方向裁剪
    android:gravity ,配合裁剪方向

    相关文章

      网友评论

          本文标题:Android里面常用的Drawable的使用

          本文链接:https://www.haomeiwen.com/subject/hjyhmxtx.html