前言

本篇Blog将记录关于Android应用资源中最经常使用的一个Drawable资源——StateListDrawable,本来说应当继续写UI方面的内容,突然跳到应用资源这边,主要是由于之前写界面的时候有一个小效果不知道怎样实现。Android自带的Button点击的时候会有一个效果,即Button按下的时候背景色会发生改变,而Button弹起的时候背景色又恢复到原来的样子。

这个效果看似非常easy。但着实不知道怎么做,由于实际应用的时候使用Button一般会改变背景,但仅仅给Button设置一个background是不行的,这样点击Button全然看不出点击效果。用户体验非常差。所以应当准备一个背景和一个点击的背景,让用户点击前后进行自己主动切换。假设是web页面的话那么这样的效果肯定是通过javascript的onmousedown和onmouseup这两个事件去实现,而Android呢?经过查找资料才发现是用过StateListDrawable这个对象实现的,以下通过和web的对照详细记录一下实现过程。

一、HTML+Javascript实现Button按下和弹起时切换图片

以下就模仿一个百度的button,一般web页面的button是通过鼠标点击的。所以当鼠标移到button上(悬浮)、当鼠标移除button(离开)、当鼠标左键按下(按键按下)、当鼠标左键松开(按键抬起)时都会有背景切换的效果。我们能够先看看百度button的效果图:

细致观察一下button的变化,不难发现一共同拥有3种背景,颜色由浅变深。从鼠标在button外部,到鼠标悬浮在button上,到按下鼠标左键点击button,然后从鼠标按键弹起,到鼠标悬浮在button上,再到鼠标离开button,颜色又由深变浅。

以下通过一个简单的HTML模拟一下上面的效果:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#img1{
cursor: pointer;
}
</style> <script type="text/javascript">
var num = 0 ;
function fun1(){
document.getElementById("img1").src="2.jpg";
} function fun2(){
document.getElementById("img1").src="1.jpg";
} function fun3(event){
document.getElementById("img1").src="3.png";
} function fun4(){
document.getElementById("img1").src="2.jpg";
}
</script>
</head>
<body>
<img id="img1" src="1.jpg" onmousemove="fun1();" onmouseout="fun2();" onmousedown="fun3(event);" onmouseup="fun4();">
</body>
</html>

执行后的效果:

非常easy,是通过javascript的4个鼠标事件去完毕背景图的切换而已。

安卓手机上的Button因为没有移动悬浮这样的情况,所以仅仅存在按下和弹起的效果,并且这一切都已经封装好了,我们仅仅须要使用就能够了。以下就详细记录一下用法。

二、通过StateListDrawable设置button效果

StateListDrawable用于组织多个Drawable对象,当使用它作为目标组件的背景、背景图片时。StateListDrawable对象所显示的Drawable对象会随着目标组件状态的改变而自己主动切换。这也是我们所须要的。

定义StateListDrawable对象的XML文件的根元素为<selector.../>,该元素能够包括多个<Item.../>元素。item元素能够指定下面属性:

android:color或android:drawable 指定颜色或Drawable对象

android:state_?

??

指定一个特定状态,类似于javascript的事件。比方:按下、弹起、悬浮等等。

以下通过一个表格看看这个state详细支持了哪些状态:

了解了各“事件”以及含义,如今在安卓中实现上面的效果应该so easy了吧!以下看看完整的样例。

res/drawable/ibtn_baidu_search.xml:



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



activity_main.xml:



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
tools:context="com.example.fragmentdemo.MainActivity" > <Button
android:layout_width="200dp"
android:layout_height="50dp"
android:background="@drawable/ibtn_baidu_search"
android:text="百度一下"
android:textColor="#FFFFFF" /> </LinearLayout>

执行效果例如以下:

三、总结

本篇blog记录了android应用资源中StateListDrawable的简单用法。也没有什么技术点和难点。仅算是自己安卓学习路上的点滴积累吧,处女座的完美主义精神让我发现了这个需求,从而寻找方法,终于解决,我也明确了技术方面不能打马虎,有问题就要及时寻找解决方法,这样日积月累终有一天我相信我能成为一名合格的Android
Develope !!!

处女男学Android(七)---Android 应用资源之StateListDrawable的更多相关文章

  1. android学习笔记32——资源

    Android应用资源 资源分类: 1.无法直接访问的原生资源,保存于asset目录下 2.可通过R资源清单类访问的资源,保存于res目录下 资源的类型以及存储方式 android要求在res目录下用 ...

  2. Android中的Drawable资源

    在Android应用中,常常会用到Drawable资源,比如图片资源等,在Android开发中我们是用Drawable类来Drawable类型资源的. Drawable资源一般存储在应用程序目录的\r ...

  3. android基础5——使用资源

    Android会基于当前的硬件.设备和语言配置来为某个资源标识符选择最合适的值. 1.在代码中使用资源 使用静态类R来访问资源.R类是基于外部资源而生的类,并且是在项目编译的时候创建的.R的每一个子类 ...

  4. (Android UI)Android应用程序中资源:图片、字符串、颜色、布局等

    Android系统设计采用代码和布局分离的设计模式,因此在设计Android应用程序时需要遵循该设计模式. “把非代码资源(如图片和字符串常量)和代码分离开来始终是一种很好的做法.”---<An ...

  5. android 中的一些资源注解,让编译器帮你检查代码

    android 中的一些资源注解,让编译器帮你检查代码 写方便的时候可以用注解来声明一些参数,以明确的指示参数的类型,让代码更安全.我们看到,在android源代码里大量使用了注解.我整理了一些注解如 ...

  6. Android最全开发资源(申明:来源于网络)

    Android最全开发资源(申明:来源于网络) 地址:http://www.jianshu.com/p/0c36302e0ed0?ref=myread

  7. Android开发---如何操作资源目录中的资源文件4 ---访问xml的配置资源文件的内容

    Android开发---如何操作资源目录中的资源文件4 XML,位于res/xml/,这些静态的XML文件用于保存程序的数据和结构. XmlPullParser可以用于解释xml文件 效果图: 描述: ...

  8. Android开发---如何操作资源目录中的资源文件3--圆角边框、背景颜色渐变效果、边框颜色

    Android开发---如何操作资源目录中的资源文件3 效果图 1.圆角边框 2.背景颜色渐变效果 1.activity_main.xml 描述: 定义了一个shape资源管理按钮 <?xml ...

  9. Android开发 ---如何操作资源目录中的资源文件2

    Android开发 ---如何操作资源目录中的资源文件2 一.颜色资源管理 效果图: 描述: 1.改变字体的背景颜色 2.改变字体颜色 3.改变按钮颜色 4.图像颜色切换 操作描述: 点击(1)中的颜 ...

随机推荐

  1. JS--我发现,原来你是这样的JS(一)(初识,历史)

    一.前言: 前段时间看红宝书(JavaScript高级程序设计),但没有计划的去看,也没有做详细的笔记,读了之后有点空虚,感觉不对劲啊,学的东西很难记住,印象不深啊,有种挫败感. 作前端的js都学不好 ...

  2. 数据表自增Id获取时IDENTITY的正确使用方式

    在SQLServer中很多表主键会设置为自增列,有的业务需求需要知道新插入的自增Id是多少,一般我们会用SELECT @@IDENTITY来获取,可由于@@IDENTITY是个全局变量作用据较大,所以 ...

  3. 【Redis】Redis学习(二) master/slave、sentinel、Cluster简单总结

    项目中用到Redis,所以准备学习一下,感觉Redis的概念还是很多的,什么主从模式.sentinel模式.集群模式的,一下子都晕了,我觉得还是有必要先理清这些基本概念再说. 一.单节点实例 单节点实 ...

  4. 使用Webpack对Css文件压缩处理的思考

    问题的起因: 使用 bulma.css ,通过webpack打包后样式出错,查看压缩代码,发现代码从css的 long hand 属性被压缩为 short hand(PS: 什么是long hand ...

  5. Express4.X中的bin/www是作什么用的?为什么没有后缀?

    使用Express4.X的同学会发现,相比Express3.X初始化项目时多了一个bin目录,并且下面还有一个www文件,那么它们有什么用呢? 在Express 3.x中集成了很多中间件,www和ap ...

  6. 8.2、常用模块介绍2:xml,configparser,hashlib

    xml: 介绍:包含关于可扩展标记语言xml的函数 使用: python有三种方法解析XML--SAX,DOM,以及ElementTree,由于xml技术落后,所以这里不对sax,dom介绍: xml ...

  7. C#中virtual(虚方法)的理解以及和abstract(抽象方法)的区别

    Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法.virtual的使用会有两种情况: 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例 ...

  8. Oracle EBS OPM complete batch

    --complete_batch --created by jenrry SET serveroutput on DECLARE x_return_status VARCHAR2 (1); l_exc ...

  9. mysql processlist 线程状态

        Analyzing 线程是对MyISAM 表的统计信息做分析(例如, ANALYZE TABLE ).   checking permissions 线程是检查服务器是否具有所需的权限来执行该 ...

  10. Interpreting /proc/meminfo and free output for Red Hat Enterprise Linux 5, 6 and 7

    Interpreting /proc/meminfo and free output for Red Hat Enterprise Linux 5, 6 and 7 Solution Verified ...