使用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`换图片的基本方法,通过合理使用`selector`和监听器,我们可以轻松实现按钮按下和弹起时的图片切换效果,提升用户交互体验。如果你有`test_lzy`这个压缩包文件,里面可能包含了一些...
可以利用Android的动画框架为`ImageButton`添加动画效果,比如按下时的缩放、旋转等,增强用户体验。 ### 7. 适配不同屏幕尺寸 为了确保`ImageButton`在不同分辨率的设备上表现一致,应考虑使用密度无关像素(dp)...
在实际应用中,`ImageButton`可以结合`Drawable`的多种状态(如正常、按下、聚焦等)来实现更复杂的交互效果。例如,你可以为`ImageButton`设置不同的`Drawable`资源以适应不同状态: ```xml <selector xmlns:...
但在`ImageButton`中,还可以设置`android:background`属性,用于定义按钮的背景,这通常是一个选择器(`selector`),以实现不同状态下的视觉效果,如按下、焦点等。 ```xml <ImageButton android:id="@+id/image...
为了实现不同状态下(如按下、聚焦等)的图像变化,可以使用`selector`作为`android:src`或`android:background`的值。状态选择器是XML文件,根据控件的状态显示不同的图像。 6. **响应触摸事件** `ImageButton`...
在Android开发中,`ImageButton`是一个非常常用的控件,它结合了`ImageView`的功能和`Button`的交互性,允许用户通过点击来触发相应的事件。本篇将深入探讨`ImageButton`在点击时如何实现图像的变化,并通过源码解析...
在实现Android 点击ImageButton时有“按下”的效果时,还需要注意ImageButton的背景设为透明,以避免ImageButton的背景遮盖图片的效果。可以使用以下代码来设为ImageButton的背景为透明: ```java imageButton....
- 如果需要在不同状态(如按下、聚焦等)下显示不同的图像,可以使用`android:src`和`android:background`属性,分别设置正常状态和选中状态的图像资源。 - 为了提高用户体验,通常会在`ImageButton`上添加触摸...
首先,让我们理解Android中的ImageButton。ImageButton是Button的一个子类,它显示一个图像,当用户点击时会触发某种操作。默认情况下,它不支持直接在其上显示文本。但是,通过自定义,我们可以轻松地添加这个功能...
本文将详细介绍两种实现Android ImageButton按下效果的方法。 首先,我们来看第一种方法,通过Java代码来实现。这种方法是在代码逻辑中监听用户的触摸事件。具体做法如下: ```java imageButton....
在 `res/drawable` 目录下创建一个 XML 文件,例如 `button_states.xml`,然后在 `ImageButton` 的 `android:src` 属性中引用这个文件。 5. **自定义行为**: 如果需要更复杂的交互效果,可以继承 `ImageButton` ...
关于工具的使用,Android Studio提供了强大的设计工具,允许我们在设计界面时直接拖放`ImageButton`,并在预览窗口中实时查看效果。此外,资源管理器可以帮助我们管理图片资源,包括为不同状态创建选择器。 至于...
这个压缩包文件"安卓Android源码——(ImageButton图片按钮).rar"很可能是包含了一个示例项目,展示了如何在Android应用中使用`ImageButton`来实现图片按钮的功能。下面我们将深入探讨`ImageButton`的相关知识点。 1...
"Android下实现win8风格的imageButton"这一主题旨在教你如何在Android应用中创建具有Windows 8特色的弹性回弹效果的ImageButton。这种效果使得按钮在被触摸时能够产生视觉上的动态反馈,提升用户体验。 首先,要...
在Android应用开发中,UI设计是至关重要的,而自定义控件可以让我们更灵活地实现独特的界面效果。本教程将深入探讨如何自定义一个基于`ImageButton`的控件,以增强用户界面的交互性和视觉吸引力。 `ImageButton`是...
在这个压缩包文件“ImageButton按下切换图片.rar”中,我们很显然是要探讨如何在用户按下`ImageButton`时切换其显示的图片,以实现更具反馈感的用户界面。 `ImageButton`的基本使用: 1. 在布局文件中声明`...
在Android开发中,自定义控件是提升应用界面独特性和用户体验的重要手段。`ImageButton`作为一个标准的Android控件,主要用于显示图像并响应点击事件。在本教程中,我们将深入探讨如何自定义`ImageButton`,创建一个...
### Android2.2 API中文文档系列(7)—— ImageButton #### 概述 在本篇文档中,我们将深入了解`ImageButton`这...此外,状态选择器的灵活应用可以让`ImageButton`在不同状态下展现出不同的视觉效果,增强用户体验。