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

来源:互联网 发布:(n-2)的阶层的算法 编辑:程序博客网 时间:2024/05/22 15:40

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

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

 

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

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

 

01import android.app.Activity;
02import android.graphics.ColorMatrixColorFilter;
03import android.view.MotionEvent;
04import android.view.View;
05import android.view.View.OnTouchListener;
06  
07public 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 数组里存的东西是颜色矩阵,不了解颜色矩阵也没关系,使用这个附件就行,只需调整亮度、对比度之类的值,然后把生产的颜色矩阵复制到代码里。

原创粉丝点击