`
zhoujianghai
  • 浏览: 439740 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android中ImageButton实现“按下”效果

阅读更多

 

使用Button的时候,实现“按下”的效果是很重要的,也是很常见的,主要有下面三种方式:

12种方式需要按下时和抬起时 两种图片,第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值和偏移量。

RGBAlpha的终值计算方法如下:

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通道值。

每个通道的源值和终值都在0255的范围内。即使计算结果大于255或小于0,值都将被限制在0255的范围内。

实现代码如下:

 

/**   
	   * 按钮被按下  
	   */
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);
	}
 

 

 

 

 

 

分享到:
评论
1 楼 ghostcynric 2012-02-09  
大哥。。第三种方法,在虚拟机上,为什么第一次按按钮时没有反应,必须要第二次按以后才会出现效果?

相关推荐

    Android ImageButton控件按下效果的实现

    从ImageButton这个字面意思上来看,它是一个图片按钮,那么我们就可以使用它做一个我们想要的图片按钮了,但是我们在实际使用的过程当中,就会发现该按钮的使用并没有想像中的那么简单,需要再增加一些代码或再配置...

    android下imagebutton换图片

    以上就是Android中`ImageButton`换图片的基本方法,通过合理使用`selector`和监听器,我们可以轻松实现按钮按下和弹起时的图片切换效果,提升用户交互体验。如果你有`test_lzy`这个压缩包文件,里面可能包含了一些...

    Android中ImageButton的用法

    可以利用Android的动画框架为`ImageButton`添加动画效果,比如按下时的缩放、旋转等,增强用户体验。 ### 7. 适配不同屏幕尺寸 为了确保`ImageButton`在不同分辨率的设备上表现一致,应考虑使用密度无关像素(dp)...

    android ImageButton的使用

    在实际应用中,`ImageButton`可以结合`Drawable`的多种状态(如正常、按下、聚焦等)来实现更复杂的交互效果。例如,你可以为`ImageButton`设置不同的`Drawable`资源以适应不同状态: ```xml &lt;selector xmlns:...

    Android4.0开发学习之ImageButton

    但在`ImageButton`中,还可以设置`android:background`属性,用于定义按钮的背景,这通常是一个选择器(`selector`),以实现不同状态下的视觉效果,如按下、焦点等。 ```xml &lt;ImageButton android:id="@+id/image...

    Android应用源码之(ImageButton图片按钮).zip

    为了实现不同状态下(如按下、聚焦等)的图像变化,可以使用`selector`作为`android:src`或`android:background`的值。状态选择器是XML文件,根据控件的状态显示不同的图像。 6. **响应触摸事件** `ImageButton`...

    android imagebutton点击变化 源码

    在Android开发中,`ImageButton`是一个非常常用的控件,它结合了`ImageView`的功能和`Button`的交互性,允许用户通过点击来触发相应的事件。本篇将深入探讨`ImageButton`在点击时如何实现图像的变化,并通过源码解析...

    Android 点击ImageButton时有“按下”的效果的实现

    在实现Android 点击ImageButton时有“按下”的效果时,还需要注意ImageButton的背景设为透明,以避免ImageButton的背景遮盖图片的效果。可以使用以下代码来设为ImageButton的背景为透明: ```java imageButton....

    Android中ImageButton的常用方法一览.pdf

    - 如果需要在不同状态(如按下、聚焦等)下显示不同的图像,可以使用`android:src`和`android:background`属性,分别设置正常状态和选中状态的图像资源。 - 为了提高用户体验,通常会在`ImageButton`上添加触摸...

    Android自定义ImageButton(带文字)

    首先,让我们理解Android中的ImageButton。ImageButton是Button的一个子类,它显示一个图像,当用户点击时会触发某种操作。默认情况下,它不支持直接在其上显示文本。但是,通过自定义,我们可以轻松地添加这个功能...

    Android ImageButton自定义按钮的按下效果的代码实现方法分享

    本文将详细介绍两种实现Android ImageButton按下效果的方法。 首先,我们来看第一种方法,通过Java代码来实现。这种方法是在代码逻辑中监听用户的触摸事件。具体做法如下: ```java imageButton....

    安卓Android源码——(ImageButton图片按钮).zip

    在 `res/drawable` 目录下创建一个 XML 文件,例如 `button_states.xml`,然后在 `ImageButton` 的 `android:src` 属性中引用这个文件。 5. **自定义行为**: 如果需要更复杂的交互效果,可以继承 `ImageButton` ...

    11-android ImageButton 图片按钮

    关于工具的使用,Android Studio提供了强大的设计工具,允许我们在设计界面时直接拖放`ImageButton`,并在预览窗口中实时查看效果。此外,资源管理器可以帮助我们管理图片资源,包括为不同状态创建选择器。 至于...

    安卓Android源码——(ImageButton图片按钮).rar

    这个压缩包文件"安卓Android源码——(ImageButton图片按钮).rar"很可能是包含了一个示例项目,展示了如何在Android应用中使用`ImageButton`来实现图片按钮的功能。下面我们将深入探讨`ImageButton`的相关知识点。 1...

    Android下实现win8风格的imageButton

    "Android下实现win8风格的imageButton"这一主题旨在教你如何在Android应用中创建具有Windows 8特色的弹性回弹效果的ImageButton。这种效果使得按钮在被触摸时能够产生视觉上的动态反馈,提升用户体验。 首先,要...

    Android UI编程自定义控件ImageButton

    在Android应用开发中,UI设计是至关重要的,而自定义控件可以让我们更灵活地实现独特的界面效果。本教程将深入探讨如何自定义一个基于`ImageButton`的控件,以增强用户界面的交互性和视觉吸引力。 `ImageButton`是...

    ImageButton按下切换图片.rar

    在这个压缩包文件“ImageButton按下切换图片.rar”中,我们很显然是要探讨如何在用户按下`ImageButton`时切换其显示的图片,以实现更具反馈感的用户界面。 `ImageButton`的基本使用: 1. 在布局文件中声明`...

    android自定义控件ImageButton

    在Android开发中,自定义控件是提升应用界面独特性和用户体验的重要手段。`ImageButton`作为一个标准的Android控件,主要用于显示图像并响应点击事件。在本教程中,我们将深入探讨如何自定义`ImageButton`,创建一个...

    Android2.2 API 中文文档系列(7) —— ImageButton

    ### Android2.2 API中文文档系列(7)—— ImageButton #### 概述 在本篇文档中,我们将深入了解`ImageButton`这...此外,状态选择器的灵活应用可以让`ImageButton`在不同状态下展现出不同的视觉效果,增强用户体验。

Global site tag (gtag.js) - Google Analytics