zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    NO.6: 若不想编译器提供自动生成的函数,就应该明确拒绝
    NO.5: 了解C++编译器默认为你生成的构造/赋值/析构
    NO.4: 确定对象被使用前已被初始化
    NO.3: 尽量使用const
    NO.2: 尽量以const,enum,inline 替换 #define
    NO.1: 视C++为一个语言联邦
    C/C++ exception类
    C/C++ 类成员函数指针 类成员数据指针
    c++中的 Stl 算法(很乱别看)
    自定义类签发校验token-实现多方式登录-自定义反爬类-admin后台表管理字段自定义-群查接口-搜索-排序-分页
  • 原文地址:https://www.cnblogs.com/yxx123/p/5263710.html
Copyright © 2011-2022 走看看