Android学习之Drawable

Posted Vonnie Jade

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android学习之Drawable相关的知识,希望对你有一定的参考价值。

Drawable有很多种,它们表示一种图像概念,但它们不全是图片。Drawable是什么呢?下面是Google android API中的定义:

A Drawable is a general abstraction for “something that can be drawn.” Most often you will deal with Drawable as the type of resource retrieved for drawing things to the screen; the Drawable class provides a generic API for dealing with an underlying visual resource that may take a variety of forms. Unlike a View, a Drawable does not have any facility to receive events or otherwise interact with the user. 
它大致的意思是:Drawable一种图像概念。通常,你会把它当成一种能够在屏幕上显示的资源类型来处理,Drawable类提供了一个通用的API来处理不同形式的图像资源。与View不同,Drawable不能接受事件,也不能和用户交互。

下面介绍几种Drawable

 

BitmapDrawable

BitmapDrawable几乎是最简单的了,它表示一张图片。通常在开发中我们就直接引用图片即可,比如: R.drawable.image(drawable目录下有一个image.jpg或者image.png的图片资源),但是我们也可以用xml来描述Drawable。xml文件如下:

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"
4         android:antialias="true|false"
5         android:dither="true|false"
6         android:filter="true|false"         android:gravity="top|bottom|left|right|center_vertical|fill_vertical|center_horizontal|fill_horizontal|center|fill|clip_vertical|clip_horizontal"
7         android:mipMap="true|false"
8         android:tileMode="disabled|clamp|repeat|mirror"/>

ShapeDrawable

这是一种很常见的Drawable,通常是通过编写xml文件来创建的,因此有些复杂。ShapeDrawable通常是通过颜色来构建图形的,既可以是纯色,也可以具有渐变效果。使用大致如下所示:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:shape="rectangle|oval|line|ring">
 4     <corners
 5         android:bottomLeftRadius="integer"
 6         android:bottomRightRadius="integer"
 7         android:radius="integer"
 8         android:topLeftRadius="integer"
 9         android:topRightRadius="integer" />
10     <gradient
11         android:angle="integer"
12         android:centerColor="integer"
13         android:centerX="integer"
14         android:centerY="integer"
15         android:endColor="color"
16         android:gradientRadius="integer"
17         android:startColor="color"
18         android:type="linear|radial|sweep"
19         android:useLevel="true|false" />
20     <padding
21         android:bottom="integer"
22         android:left="integer"
23         android:right="integer"
24         android:top="integer" />
25     <size
26         android:width="integer"
27         android:height="integer" />
28     <solid android:color="color" />
29     <stroke
30         android:width="integer"
31         android:color="color"
32         android:dashGap="integer"
33         android:dashWidth="integer" />
34 
35 </shape>
    • android:shape 
        表示图形形状:rectangle(矩形)、oval(椭圆)、line(横线)、ring(圆环),默认矩形,line和ring必须有 < stroke>标签来指定宽度和颜色,否则达不到预期效果。
    • < gradient>  渐变效果,与< solid>标签互斥

    • < solid>  纯色填充 通过android:color即可指定shape的颜色

LayerDrawable

它是一种层次化的Drawable,在< layer-list>< /layer-list>结点下有多个< item>< /item>其中后面的< item>< /item>叠加在前面的< item>< /item>上面,想爱你面是一耳光文本输入框的例子:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 3     <item>
 4         <shape android:shape="rectangle">
 5             <solid android:color="#0ac39e" />
 6         </shape>
 7     </item>
 8     <item android:bottom="6dp">
 9         <shape android:shape="rectangle">
10             <solid android:color="#ffffff" />
11         </shape>
12     </item>
13     <item
14         android:bottom="1dp"
15         android:left="1dp"
16         android:right="1dp">
17         <shape android:shape="rectangle">
18             <solid android:color="#ffffff" />
19         </shape>
20     </item>
21 
22 </layer-list>

StateListDrawable

StateListDrawable对应< selector>标签,这个大家应该比较熟悉。我们经常会给Button设置一个selector。StateListDrawable表示Drawable的集合,集合中的每个Drawable都对应着View的一种状态,系统会根据View的状态来给View设定相应的Drawable,下面是一个selector的创建样例:

1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3     <item android:drawable="@android:color/black"/>    <!-- 表示默认状态-->
4     <item android:state_focused="true"
5           android:drawable="@android:color/holo_orange_dark"/><!-- 表示获取焦点状态-->
6     <item android:state_pressed="true"
7           android:drawable="@android:color/holo_red_dark"/><!-- 表示被点击状态-->
8 </selector>

 

以上是关于Android学习之Drawable的主要内容,如果未能解决你的问题,请参考以下文章

Android学习之网上商城(上)

Android学习之Android studio TraceView和lint工具的使用具体解释

Android学习之APP点击功能闪退问题的处理一

Android学习之Recyclerview

Android学习之——优化篇

Android学习之Android studio TraceView和lint工具的使用详解