前言

本篇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. 前端了解即可:postman(接口测试)的使用

    postman的使用,前端了解即可.因为都是一些工具的应用,截图比较多,之前在有道云笔记上总结记录过,在这不在写了,展示一张笔记截图. 此文仅做参考一下,有不足之处,欢迎指正:

  2. w3school前端教程合集

    有关前端开发的w3c教程合集. http://caibaojian.com/w3school/ 地图 ajax教程 Canvas教程 CSS教程 CSS3教程 CSS3选择器 CSS参考手册 DHTM ...

  3. @EnableDiscoveryClient与@EnableEurekaClient 区别

    Eureka依赖: <dependency>     <groupId>org.springframework.cloud</groupId>   <arti ...

  4. 微信小程序< 1 > ~ Hello 微信小程序

    简介 微信小程序,最近声音比较大,开始慢慢学习一下这个小东西,从安装开发工具开始吧,不会JS,学起来会不会很吃力呢? 注册账号 参考官方网站 开发工具 1.微信Web开发工具 2.官方下载地址,针对自 ...

  5. Maven的下载与安装(Windows版本)

    前言: 安装Maven 3,需要安装jdk1.7及以上版本 具体步骤如下: 1.进入官网:http://maven.apache.org/download.cgi,如下图红框部分 其中: apache ...

  6. 牛客网 Java 工程师能力评估 20 题 - 详解

    牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...

  7. windows10如何打开vhd文件

    本人电脑安装了Visual Studio 2017,但是由于项目需求需要Core SDK(2.0)的版本支持,也就是2017最新版.所以现在需要利用visual Studio 2017最新版本的安装包 ...

  8. 如何监视 Azure 中的虚拟机

    通过收集.查看和分析诊断与日志数据,可以利用很多机会来监视 VM. 若要执行简单的 VM 监视,可以在 Azure 门户中使用 VM 的“概述”屏幕. 可以使用扩展在 VM 上配置诊断以收集更多指标数 ...

  9. Eclipse+Weblogic 12开发简单的Enterprise Application

    学到EJB方面的内容,遇到了很多问题,翻阅了无数遍Java EE和Weblogic的官方文档,在google上进行了无数次搜索都没有答案,可能我要找的答案太冷门.这一切都起源于Java EE官方文档里 ...

  10. 检索 COM 类工厂中 CLSID 为 {00021A20-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80080005

    创建Excel对象失败: Excel.Application xApp = new Excel.Application(); 错误提示:{"检索 COM 类工厂中 CLSID 为 {0002 ...