使用Button的时候,实现“按下”的效果是很重要的,也是很常见的,主要有下面三种方式:
第1、2种方式需要按下时和抬起时
两种图片,第3种方式通过改变颜色矩阵,从而改变图像的亮度,对比度,饱和度和色相等。
(1)用java代码实现
imageButton.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
//更改为按下时的背景图片
v.setBackgroundResource(R.drawable.pressed);
}else if(event.getAction() == MotionEvent.ACTION_UP){
//改为抬起时的图片
v.setBackgroundResource(R.drawable.released);
}
return false;
}
});
(2)用xml配置文件实现,xml内容如下
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:drawable="@drawable/released " />
<item android:state_pressed="true" android:drawable="@drawable/pressed" />
<item android:state_focused="true" android:drawable="@drawable/pressed" />
item android:drawable="@drawable/released " />
</selector>
把上面的xml文件,命名为button_regist.xml放在drawable目录下,使用的方法如下:
<ImageButton
android:id="@+id/imageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
android:src="@drawable/button_regist " >
</ImageButton>
(3)以上两种方式比较简单,但是需要很多的图片和布局文件,如果项目中的图片按钮比较多,那就很浪费资源。第三种方式使用矩阵颜色滤镜。
颜色过滤矩阵是一个4x5的矩阵, 四行分别是 红色通道值,绿色通道值,蓝色通道值和alpha通道值。五列分别是 对应通道的红色值,绿色值,蓝色值,alpha值和偏移量。
RGB和Alpha的终值计算方法如下:
Red通道终值 = a[0] * srcR + a[1] * srcG + a[2] * srcB +
a[3] * srcA + a[4]
Green通道终值 = a[5] * srcR + a[6] * srcG + a[7] * srcB +
a[8] * srcA + a[9]
Blue通道终值 = a[10] * srcR + a[11] * srcG + a[12] *
srcB + a[13] * srcA + a[14]
Alpha通道终值 = a[15] * srcR + a[16] * srcG + a[17] *
srcB + a[18] * srcA + a[19]
备注:
srcR为原图Red通道值,srcG为原图Green通道值,srcB为原图Blue通道值,srcA为原图Alpha通道值。
每个通道的源值和终值都在0到255的范围内。即使计算结果大于255或小于0,值都将被限制在0到255的范围内。
实现代码如下:
/**
* 按钮被按下
*/
private final static float[] BUTTON_PRESSED = new float[] {
2.0f, 0, 0, 0, -50,
0, 2.0f, 0, 0, -50,
0, 0, 2.0f, 0, -50,
0, 0, 0, 5, 0 };
/**
* 按钮恢复原状
*/
private final static float[] BUTTON_RELEASED = new float[] {
1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0 };
private static final OnTouchListener touchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
v.getBackground().setColorFilter(new ColorMatrixColorFilter(BUTTON_PRESSED));
v.setBackgroundDrawable(v.getBackground());
}else if(event.getAction() == MotionEvent.ACTION_UP) {
v.getBackground().setColorFilter(new ColorMatrixColorFilter(BUTTON_RELEASED));
v.setBackgroundDrawable(v.getBackground());
}
return false;
}
};
public static void setButtonStateChangeListener(View v) {
v.setOnTouchListener(touchListener);
}
分享到:
相关推荐
从ImageButton这个字面意思上来看,它是一个图片按钮,那么我们就可以使用它做一个我们想要的图片按钮了,但是我们在实际使用的过程当中,就会发现该按钮的使用并没有想像中的那么简单,需要再增加一些代码或再配置...
主要介绍了Android ImageButton自定义按钮的按下效果的代码实现方法,需要的朋友可以参考下
主要介绍了 Android 点击ImageButton时有“按下”的效果的实现的相关资料,需要的朋友可以参考下
Android 单击选中的ImageButton[]图像数组用法示例,类似于Radio的功能,不过用图片表现,这样可使Android UI更加友好,视觉更漂亮一些,用户轻触图片,即可选中该数据项,比Radio用户体验更好,如截图所示的选中...
Android下实现win8的张力回弹效果的imagebutton
Shape Ripple is a library that emulates a ripple like animations with cool tweaks on the go. It runs on API level 11 and upwards. As addition you can even create your own shape renderer through the ...
4.5 实现同意条款效果 4.6 radiogroup选择 4.7 imageview相框 4.8 spinner选择处理 4.9 gallery相簿 4.10 用.iava.io.file实现文件搜索 4.11 置换imagebutton按钮 4.12 实现autocompletetextview输入提示 4.13 实现...
4.2.22 对话框中的进度条(ProgressDialog) 4.3 界面布局 4.3.1 垂直线性布局 4.3.2 水平线性布局 4.3.3.相对布局(RelativeLayout) 4.3.4 表单布局(TableLayout) 4.3.5 切换卡(TabWidget) 4,4 小结 第5章 Android...
今天美工 直接给我一张图片,要我实现图片点击之后有阴影效果,当时想到了ImageButton,随即自己写了个Demo,发现ImageButton继承ImageView 会有一个默认的背景样式,而且在布局中设计src(前景) 太丑,于是自己写了...
最重要的是还全面介绍了如何利用原生的C,C++(NDK)和Python、Lua等脚本语言(AndroidScriptingEnvironment)来开发Android应用,《Android应用开发揭秘》实战性强,书中的每个知识点都有配精心设计的示例,尤为...
《Android应用开发揭秘》全部实例源代码,... 16.4 AndroidNDK中使用0penGL 16.5小结 第17章 Android脚本环境 17.1 Android脚本环境简介 17.2 Android脚本环境安装 17.3如何编写Android脚本程序 17.4小结
AppWidget 显示一些高级android appwidget属性,例如listview,复选框(使用imagebutton实现),刷新数据运行时以及使用shared_prefs保持状态。 例如:1:listview + checkbox Appwidget支持listview,但不支持...
作者简介 杨丰盛,Android应用开发先驱... 16.4 AndroidNDK中使用0penGL 16.5小结 第17章 Android脚本环境 17.1 Android脚本环境简介 17.2 Android脚本环境安装 17.3如何编写Android脚本程序 17.4小结
1.3Android中的个人英雄主义 1.3.1第一届挑战赛冠军介绍 1.3.2第二届挑战赛冠军介绍 1.3.3Androidmarket 1.4Android平台 1.4.1Android体系结构 1.4.2熟悉的开发工具 1.4.3合理的学习曲线 1.5小结 第2章搭建你的开发...
参考:...3.ImageView一开始是不可见的(invisible),当ImageButton点击后,它会实现zoom动画,就像从ImageButton上扩大显示出来。 <FrameLayout xmlns:android