[Android] 为ImageButton添加按下的动画效果 变亮或变暗

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

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

 

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

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

 

import  android.app.Activity;
import  android.graphics.ColorMatrixColorFilter;
import  android.view.MotionEvent;
import  android.view.View;
import  android.view.View.OnTouchListener;
  
public  class  TouchedAnimation  extends  Activity {
      
     public  static  final  OnTouchListener TouchLight =  new  OnTouchListener() {
  
         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 };
         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 };
  
         @Override
         public  boolean  onTouch(View v, MotionEvent event) {
             if  (event.getAction() == MotionEvent.ACTION_DOWN) {
                 v.getBackground().setColorFilter(
                         new  ColorMatrixColorFilter(BT_SELECTED));
                 v.setBackgroundDrawable(v.getBackground());
             }  else  if  (event.getAction() == MotionEvent.ACTION_UP) {
                 v.getBackground().setColorFilter(
                         new  ColorMatrixColorFilter(BT_NOT_SELECTED));
                 v.setBackgroundDrawable(v.getBackground());
             }
             return  false ;
         }
     };
      
     public  static  final  OnTouchListener TouchDark =  new  OnTouchListener() {
          
         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 };
         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 };
          
         @Override
         public  boolean  onTouch(View v, MotionEvent event) {
             if  (event.getAction() == MotionEvent.ACTION_DOWN) {
                 v.getBackground().setColorFilter(
                         new  ColorMatrixColorFilter(BT_SELECTED));
                 v.setBackgroundDrawable(v.getBackground());
             }  else  if  (event.getAction() == MotionEvent.ACTION_UP) {
                 v.getBackground().setColorFilter(
                         new  ColorMatrixColorFilter(BT_NOT_SELECTED));
                 v.setBackgroundDrawable(v.getBackground());
             }
             return  false ;
         }
     };
  
         @Override
     public  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.main);
  
         ImageButton ib1, ib2;
                 ib1 = (ImageButton) findViewById(R.id.ImageButton01);
                 ib2 = (ImageButton) findViewById(R.id.ImageButton02);
  
                 ib1.setOnTouchListener(TouchLight);
                 ib2.setOnTouchListener(TouchDark);
     }
}

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

你可能感兴趣的:([Android] 为ImageButton添加按下的动画效果 变亮或变暗)