ImageButton添加按下的动画效果 变亮或变暗

本文介绍了在Android中为ImageButton添加按压效果的方法,包括使用颜色矩阵实现按键变亮和变暗的特效,无需额外的按下效果图片。通过设置OnTouchListener并应用TouchLight和TouchDark监听器,可以轻松实现这一功能。

Android中使用ImageButton的话,程序里按下那个ImageButton时感觉不到任何按下的效果。

网上有2中经典的解决方案,一种是使用xml,一种是写在代码里。

 

这里我想要介绍另一种方法,使ImageButton有按下的特效,只需要准备一张普通的图片,不需要按下效果的图片。

直接看示例代码,创建 TouchLight 和 TouchDark 这两个 OnTouchListener,然后给 ImageButton 设置OnTouchListener就行了,如果使用TouchLight,则按下效果是按键变亮;另一个就是变暗。

 

01 import android.app.Activity;
02 import android.graphics.ColorMatrixColorFilter;
03 import android.view.MotionEvent;
04 import android.view.View;
05 import android.view.View.OnTouchListener;
06   
07 public class TouchedAnimation extends Activity {
08       
09     public static final OnTouchListener TouchLight = new OnTouchListener() {
10   
11         public final float[] BT_SELECTED = new float[] {1,0,0,0,50,0,1,0,0,50,0,0,1,0,50,0,0,0,1,0};
12         public final float[] BT_NOT_SELECTED = new float[] {1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0};
13   
14         @Override
15         public boolean onTouch(View v, MotionEvent event) {
16             if (event.getAction() == MotionEvent.ACTION_DOWN) {
17                 v.getBackground().setColorFilter(
18                         new ColorMatrixColorFilter(BT_SELECTED));
19                 v.setBackgroundDrawable(v.getBackground());
20             else if (event.getAction() == MotionEvent.ACTION_UP) {
21                 v.getBackground().setColorFilter(
22                         new ColorMatrixColorFilter(BT_NOT_SELECTED));
23                 v.setBackgroundDrawable(v.getBackground());
24             }
25             return false;
26         }
27     };
28       
29     public static final OnTouchListener TouchDark = new OnTouchListener() {
30           
31         public final float[] BT_SELECTED = new float[] {1,0,0,0,-50,0,1,0,0,-50,0,0,1,0,-50,0,0,0,1,0};
32         public final float[] BT_NOT_SELECTED = new float[] {1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0};
33           
34         @Override
35         public boolean onTouch(View v, MotionEvent event) {
36             if (event.getAction() == MotionEvent.ACTION_DOWN) {
37                 v.getBackground().setColorFilter(
38                         new ColorMatrixColorFilter(BT_SELECTED));
39                 v.setBackgroundDrawable(v.getBackground());
40             else if (event.getAction() == MotionEvent.ACTION_UP) {
41                 v.getBackground().setColorFilter(
42                         new ColorMatrixColorFilter(BT_NOT_SELECTED));
43                 v.setBackgroundDrawable(v.getBackground());
44             }
45             return false;
46         }
47     };
48   
49         @Override
50     public void onCreate(Bundle savedInstanceState) {
51         super.onCreate(savedInstanceState);
52         setContentView(R.layout.main);
53   
54         ImageButton ib1, ib2;
55                 ib1 = (ImageButton) findViewById(R.id.ImageButton01);
56                 ib2 = (ImageButton) findViewById(R.id.ImageButton02);
57   
58                 ib1.setOnTouchListener(TouchLight);
59                 ib2.setOnTouchListener(TouchDark);
60     }
61 }

代码里的两个 float 数组里存的东西是颜色矩阵,不了解颜色矩阵也没关系,使用这个附件就行,只需调整亮度、对比度之类的值,然后把生产的颜色矩阵复制到代码里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值