原文:

Android Drawable的9种子类 介绍

 

Drawable 在android里面 就是代表着图像,注意是图像 而不是图片。 图片是图像的子集。图像除了可以包含图片以外 还可以包含颜色。

换句话说Drawble就是canvas 可以绘制的 一种概念。 android 系统自带了很多种drawable。我们最好对自带的drawable 有一种比较熟悉的了解,

这样对我们apk开发很有好处,因为drawable使用 非常简单 基本上就是xml编写 即可。比你自己自定义view的成本要低的多。

而且非图片类型的drawable 占用控件也小,有助于我们减少apk的体积。

1.BitmapDrawable

这个用的人很多,不多做介绍了,唯一要注意的就是 下面这个参数 总共3种,3种参数分别对应哪些效果 要搞清楚。

1 <?xml version="1.0" encoding="utf-8"?>
2 <!--android:tileMode 3种参数 repeat clamp和mirror 的区别要搞清楚-->
3 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
4 android:src="@mipmap/shuqi"
5 android:tileMode="repeat">
6
7 </bitmap>

repeat的效果:

mirror:

clamp的效果就不放了,因为这种效果 我自己也没实际用过,觉得挺2的。。 有兴趣的可以自己玩一下

2.ShapeDrawable

这个熟悉的人也应该很多 我们通常用来做editext 背景图时的那些 圆角啊  尖角之类的。可以省去ui不少功夫,程序员自己就能搞定了

 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle">
4 <corners android:radius="10dp"></corners>
5 <gradient
6 android:angle="45"
7 android:endColor="#FFFF0000"
8 android:startColor="#FFFF0000" />
9 <padding
10 android:bottom="10dp"
11 android:left="10dp"
12 android:right="10dp"
13 android:top="10dp" />
14 <stroke
15 android:width="2dp"
16 android:color="#dcdcdc" />
17 <solid android:color="#ffff9d77" />
18 </shape>

效果:

3.layerDrawable

这个用的人就不多了,实际上就是 后面的item 会覆盖掉前面的item 能做出那种层次化的显示效果。比如微信的输入框 背景就是这么做的。

 <?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"></solid>
6 </shape>
7 </item>
8
9 <item android:bottom="6dp">
10 <shape android:shape="rectangle">
11 <solid android:color="#ffffff"></solid>
12 </shape>
13 </item>
14
15 <item
16 android:bottom="1dp"
17 android:left="1dp"
18 android:right="1dp">
19 <shape android:shape="rectangle">
20 <solid android:color="#ffffff"></solid>
21 </shape>
22 </item>
23
24
25 </layer-list>

4.StateListDrawable

这个例子就不给了,我们天天都在用的 selector 就是他。反应view 状态变化的。

5.LeverListDrawable
这个就是可以通过简单的java代码setImageLevel以后 就可以自动的切换图片。android的电量 变化 就是用这个做的,

我写一个简单的例子 大家可以感受一下。假设我们的需求是每隔500ms 切换一次图片背景。

 1 <?xml version="1.0" encoding="utf-8"?>
2 <level-list xmlns:android="http://schemas.android.com/apk/res/android">
3
4 <item
5 android:drawable="@drawable/ic_accessible_black_18dp"
6 android:maxLevel="0"></item>
7 <item
8 android:drawable="@drawable/ic_account_circle_black_18dp"
9 android:maxLevel="1"></item>
10 <item
11 android:drawable="@drawable/ic_account_balance_wallet_black_18dp"
12 android:maxLevel="2"></item>
13 <item
14 android:drawable="@drawable/ic_aspect_ratio_black_18dp"
15 android:maxLevel="3"></item>
16 <item
17 android:drawable="@drawable/ic_book_black_18dp"
18 android:maxLevel="4"></item>
19
20 </level-list>

java代码:

 1  iv = (ImageView) findViewById(R.id.iv);
2 iv.setOnClickListener(new View.OnClickListener() {
3
4 @Override
5 public void onClick(View v) {
6 new Thread() {
7
8 @Override
9 public void run() {
10 for (int i = 0; i < 5; i++) {
11 final int ii = i;
12 try {
13 sleep(500);
14 } catch (InterruptedException e) {
15 e.printStackTrace();
16 }
17
18 runOnUiThread(new Runnable() {
19 @Override
20 public void run() {
21 iv.setImageLevel(ii);
22 }
23 });
24
25 if (i == 4) {
26 i = -1;
27 }
28 }
29 }
30 }.start();
31 }
32 });

效果如下:

用这个drawable就可以省去 我们在java代码里 写那么多set。。。多方便。

6.TransitionDrawable

这个就特别赞了,就是一个渐入渐出的效果。非常方便。你要是还在set alpha什么的那就弱爆了。

1 <?xml version="1.0" encoding="utf-8"?>
2 <transition xmlns:android="http://schemas.android.com/apk/res/android">
3 <item android:drawable="@mipmap/shuqi"></item>
4 <item android:drawable="@mipmap/shuqi2"></item>
5 </transition>

java代码:

 1 iv = (ImageView) findViewById(R.id.iv);
2 iv.setOnClickListener(new View.OnClickListener() {
3
4 @Override
5 public void onClick(View v) {
6 TransitionDrawable td=(TransitionDrawable)iv.getBackground();
7 td.startTransition(1000);
8 //反过来也是可以的
9 // td.reverseTransition(1000);
10 }
11 });

效果:

7 InsetDrawable

一般希望背景比自己实际区域小的时候 用这个

 

效果:

8.ScaleDrawable

这个跟level有点像,就是可以直接缩放图片的

1 <?xml version="1.0" encoding="utf-8"?>
2 <scale xmlns:android="http://schemas.android.com/apk/res/android"
3 android:drawable="@mipmap/shuqi"
4 android:scaleHeight="70%"
5 android:scaleGravity="center"
6 >
7 </scale>
1    iv = (ImageView) findViewById(R.id.iv);
2 //下面的不能漏掉 因为level默认是0 就显示不出来了
3 ScaleDrawable scaleDrawable=(ScaleDrawable)iv.getBackground();
4 scaleDrawable.setLevel(1);

9.ClipDrawable

其实和leveldrawable scaleDrawable都挺像的,只不过这个是用来裁剪drawable的。

可以灵活的设置裁剪的方向 角度等等。

demo就不写了和上面的差不多,可以自己写一个试试。

Android Drawable的9种子类 介绍的更多相关文章

  1. android 定位的几种方式介绍

    [地理位置] android 定位的几种方式介绍 开发中对于地图及地理位置的定位是我们经常要用地,地图功能的使用使得我们应用功能更加完善,下面 www.androidkaifa.com 总结了一下网络 ...

  2. Android视频播放的两种方式介绍

    1.在Android 中播放视频的方式有两种: 第一种方式是使用MediaPlayer 结合SurfaceView 来播放,通过MediaPlayer来控制视频的播放.暂停.进度等: 通过Surfac ...

  3. 【转】【Android】Android Drawable Shape 组合画田字格

    使用layer-list组合多个Shap <?xml version="1.0" encoding="utf-8"?> <layer-list ...

  4. Android 中常见控件的介绍和使用

    1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.la ...

  5. Android基础_1 四大基本组件介绍与生命周期

    Android四大基本组件分别是Activity,Service(服务),Content Provider(内容提供者),BroadcastReceiver(广播接收器). 一.四大基本组件 Acti ...

  6. Android Drawable 与 LayerList综合汇总

    先看需求.要求这样的效果 上代码 <?xml version="1.0" encoding="utf-8"? > <layer-list xm ...

  7. GitHub 上排名前 100 的 Android 开源库进行简单的介绍

    若有任何疑问可通过邮件或微博联系我 项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开 ...

  8. Android Drawable绘图学习笔记(转)

    如何获取 res 中的资源 数据包package:android.content.res 主要类:Resources Android SDK中的简介:Class for accessing an ap ...

  9. Xamarin Android Fragment的两种加载方式

    android Fragment的重点: 3.0版本后引入,即minSdk要大于11 Fragment需要嵌套在Activity中使用,当然也可以嵌套到另外一个Fragment中,但这个被嵌套的Fra ...

随机推荐

  1. IOS之未解问题--给UITableView提取UITableViewDataSource并封装瘦身失败

    前言:阅读了<更轻量的 View Controllers>,发现笔者这个优化重构代码的想法真的很不错,可以使得抽取的UITableViewDataSource独立写在一个类文件里,并且也写 ...

  2. paas架构之docker——容器进程管理

    1.docker进程管理 docker的进程管理命令ps的用法基本和ubuntu系统的用法一致 1.1. 查看docker进程 sudo docker ps –a 1.2. 附着到容器上 Sudo d ...

  3. 常用的JSTL函数

    下面是JSTL中自带的方法列表以及其描述 函数名 函数说明 使用举例 fn:contains 判断字符串是否包含另外一个字符串 <c:if test="${fn:contains(na ...

  4. Handler、Looper、MessageQueue、Thread源码分析

    关于这几个之间的关系以及源码分析的文章应该挺多的了,不过既然学习了,还是觉得整理下,印象更深刻点,嗯,如果有错误的地方欢迎反馈. 转载请注明出处:http://www.cnblogs.com/John ...

  5. PowerVault TL4000 Tape Library 告警:“Media Attention”

      Dell PowerVault TL4000 磁带库机的指示灯告警,从Web管理平台登录后,在菜单"Library Status"下发现如下告警信息:  Library Sta ...

  6. 什么是purge操作

    要明白什么清空(purge)操作,你得明白什么是事务的多版本控制,即MVCC(multi-version concurrency control).Innodb为了实现MVCC, 需要在表空间内保存老 ...

  7. 解读Python发送邮件

    解读Python发送邮件 Python发送邮件需要smtplib和email两个模块.也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单.今天,就来好好学习一下使用Pyt ...

  8. 将HTML特殊转义为实体字符的两种实现方式

    前端开发工作中,经常需要将HTML的左右尖括号等转义成实体形式.我们不能把<,>,&等直接显示在最终看到的网页里.需要将其转义后才能在网页上显示. 转义字符(Escape Sequ ...

  9. Linux dsh

    一.简介 目前在企业网络中越来越多的出现Linux服务器,而如何方便高效的管理大量的Linux服务器是系统管理员非常关心的一个问题,而dsh正是一个通过命令行有效地管理大量Linux的工具.   二. ...

  10. js动态切换图片

    <script language =javascript > $(function () { initAds(); }); function initAds() { var curInde ...