Android开发总结笔记 Drawable (上) 3-1

来源:互联网 发布:淘宝如何处理中差评 编辑:程序博客网 时间:2024/06/09 15:14

Android中的Drawable分为两种

  • 一种是普通的图片资源,放到res/mipmap下的,

  • 另外一种是xml形式的drawable资源,一般放到res/drawable


下面就来看一下Android提供的13种Drawable


1.ColorDrawable

最简单且最常用的一种Drawable

可以通过Java代码新建一个,也可以通过xml文件配置,常用的就是在xml中设置,创建一个res/colors.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.    <color name="colorPrimary">#3F51B5</color>
  4.    <color name="colorPrimaryDark">#303F9F</color>
  5.    <color name="colorAccent">#FF4081</color>
  6.    <color name="normal_white">#FFFFFF</color>
  7.    <color name="normal_black">#000000</color>
  8.    <color name="dark_gray">#B3B3B3</color>
  9.    <color name="orange">#FF5000</color>
  10.    <color name="green">#5DC971</color>
  11.    <color name="divier_color">#F3F2F7</color>
  12.    <color name="light_blue">#5AD7FD</color>
  13.    <color name="dark_blue">#329DDF</color>
  14. </resources>


可以通过@color获得对应的color值, 在Java中

  1. int orange = getResourcecs().getColor(R.color.orange);


也可以使用系统的color,在xml中用@android:color/orange

  1. view.setBackgroundColor(Color.BLUE);
  2. //获取
  3. int color = Resources.getSystem().getColor(android.R.color.holo.orange.light);

还能用argb值设置

  1. Color.argb(a,r,g,b);//透明,红色,绿色,蓝色

2.NinePatchDrawable

也叫.9图,可以实现图片的拉伸自适应。

另外,9patch图必须放到drawable目录下。

具体怎么绘制9patch:链接


3.ShapeDrawable

定义形状的一个Drawable,百度了一下,发现这个Drawable有点奇怪,因为接下来要讲的一个GradientDrawable也是在同一个标签<shape>里面定义,这篇文章说了,<shape>标签实际上是属于GradientDrawable的,而ShapeDrawable只能通过Java代码画出来。。 


4.GradientDrawable

名字上是渐变,但事实上还有很多可以配置的属性。

  1. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  2.    android:shape="oval">
  3. </shape>
  • rectangle    矩阵,默认的shape

  • oval            椭圆

  • line            一条水平的直线。必须使用 <stroke> 元素来定义线的宽度

  • ring             圆环


下面的属性,只有android:shape被设置为ring的时候才能用,写在shape开标签里

  • android:innerRadius 内环的半径

  • android:innerRadiusRatio 内部环的比例,如果等于"5“那么内部半径等于环的宽度除以5,这个值会被android:innerRadius重写,默认值是9

  • android:thickness 环的宽度

  • android:thicknessRadio 厚度的比例,如果等于"2",那么厚度等于环的宽度除以2,这个值会被android:thickness重写默认值是3,

  • android:userLevel:如果用在LevelListDrawable里面,就是true,如果通常不出现则为false


<corner>

为shape创建圆角

注意:圆角半径都必须大于1,不然就没有圆角了

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android">
  3.    <corners
  4.        android:bottomLeftRadius="5dp"
  5.        android:bottomRightRadius="5dp"
  6.        android:radius="5dp"
  7.        android:topLeftRadius="5dp"
  8.        android:topRightRadius="5dp" />
  9. </shape>

<gradient>
创建渐变颜色

  1.    <gradient
  2.        android:angle="90" //渐变的角度,0代表LTR,90代表BTT,需为45的倍数,默认0
  3.        android:centerX="0.5" //渐变中心的相对X坐标,在0到0.1之间
  4.        android:centerY="0.5" //渐变中心的相对Y坐标,在0到0.1之间
  5.        android:centerColor="@color/green"  //可选颜色值,基于startColor和EndColor之间
  6.        android:endColor="@color/dark_blue" //结束的颜色
  7.        android:startColor="@color/normal_black" //开始的颜色
  8.        android:gradientRadius="5dp" //渐变的半径,android:type设置为radial时用
  9.        android:type="linear" //渐变的模式,默认linear线性,radial辐射,sweep扫描线
  10.        android:useLevel="true"/> //如果在LeveListDrawable中使用为true

<padding>

内容与视图边界的距离

  1. <padding
  2.        android:left="1dp"
  3.        android:right="1dp"
  4.        android:top="1dp"
  5.        android:bottom="1dp"/>

<size>

这个shape的大小

  1. <size
  2.        android:width="50dp"
  3.        android:height="50dp" />

默认情况下,这个shape会缩放到和他所在容器大小成正比,当你在一个ImageView中使用这个shape.可以用android:scaleType="center"来限制这种缩放


<solid>

填充色

  1. <solid
  2.        android:color="@color/normal_black"/>

<stroke>

描边色,当android:shape="line"的时候,必须设置该元素

  1. <stroke
  2.        android:width="2dp" //表示描边的宽度
  3.        android:color="@color/dark_blue" //表示描边的颜色
  4.        android:dashGap="10dp"//表示描边为虚线时,虚线之间的间隔
  5.        android:dashWidth="2dp"/> //表示描边为虚线时,虚线宽度

5.BitmapDrawable

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
  3.    android:src="@mipmap/ic_launcher" //drawable资源来源
  4.    android:antialias="true" //是否开启抗锯齿
  5.    android:dither="true" //如果位图于屏幕的像素配置不同时,是否允许抖动。
  6.    android:filter="true"//是否允许对位图进行滤波,对位图进行收缩,或者延展使用滤波可以获得平滑的外观效果
  7.    android:gravity="bottom"
  8.    android:tileMode="clamp" //图片填充容器的模式,设置后gravity会被忽略,disabled平铺拉伸,clamp原图,repeat平铺,mirror镜像平铺
  9.    android:tint="@color/colorAccent" //着色颜色
  10.    android:alpha="20"
  11.    android:tileModeX="clamp"X方向的填充模式
  12.    android:tileModeY="clamp"Y方向的填充模式
  13.    android:mipMap="true" //是否使用mipmap渲染
  14.    android:tintMode="multiply"//着色模式,具体有六种,add,screem,src_over,src_in,multiple ,src_atop
  15.    android:autoMirrored="true"//是否需要镜像翻转
6.InsetDrawable

表示一个drawable嵌入到另外一个drawable内部,并且在内部留一些间距。表示两个drawable和容器之间的边距,当控件需要的边框比实际的边框小的时候比较适合使用insetDrawable

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <inset xmlns:android="http://schemas.android.com/apk/res/android"
  3.    android:drawable="@mipmap/ic_launcher"
  4.    android:inset="10dp"
  5.    android:insetBottom="10dp"
  6.    android:insetLeft="10dp"
  7.    android:insetRight="10dp"
  8.    android:insetTop="10dp">
  9. </inset>

7.ClipDrawable

ClipDrawble可以对一个drawable进行剪切操作,可以控制drawable的剪切区域,以及相对于容器的对其方式,系统的进度条就是用这个来实现的,根据level值(0[不显示]~10000[完全显示])的大小决定剪切区域的大小,可以在Java代码中通过setLevel方法设置

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <clip xmlns:android="http://schemas.android.com/apk/res/android"
  3.    android:drawable="@mipmap/ic_launcher" //资源
  4.    android:clipOrientation="horizontal" //剪切方向
  5.    android:gravity="bottom"> //制定从哪个地方开始切
  6. </clip>

关于gravity属性的一些解析

  • top将这个对象放在容器的顶部,不改变其大小。当clipOrientation 是"vertical",裁剪发生在drawable的底部(bottom)

  • bottom将这个对象放在容器的底部,不改变其大小。当clipOrientation 是 "vertical",裁剪发生在drawable的顶部(top)

  • left将这个对象放在容器的左部,不改变其大小。当clipOrientation 是 "horizontal",裁剪发生在drawable的右边(right)。默认的是这种情况。

  • right将这个对象放在容器的右部,不改变其大小。当clipOrientation 是 "horizontal",裁剪发生在drawable的左边(left)。

  • center_vertical将对象放在垂直中间,不改变其大小。裁剪的情况和”center“一样。

  • fill_vertical垂直方向上不发生裁剪。(除非drawable的level是 0,才会不可见,表示全部裁剪完)

  • center_horizontal将对象放在水平中间,不改变其大小。裁剪的情况和”center“一样。

  • fill_horizontal水平方向上不发生裁剪。(除非drawable的level是 0,才会不可见,表示全部裁剪完)

  • center将这个对象放在水平垂直坐标的中间,不改变其大小。当clipOrientation 是 "horizontal"裁剪发生在左右。当clipOrientation是"vertical",裁剪发生在上下。

  • fill填充整个容器,不会发生裁剪。(除非drawable的level是 0,才会不可见,表示全部裁剪完)。

  • clip_vertical额外的选项,它能够把它的容器的上下边界,设置为子对象的上下边缘的裁剪边界。裁剪要基于对象垂直重力设置:如果重力设置为top,则裁剪下边,如果设置为bottom,则裁剪上边,否则则上下两边都要裁剪。

  • clip_horizontal:额外的选项,它能够把它的容器的左右边界,设置为子对象的左右边缘的裁剪边界。裁剪要基于对象垂直重力设置:如果重力设置为right,则裁剪左边,如果设置为left,则裁剪右边,否则则左右两边都要裁剪。




0 0
原创粉丝点击