Android——ImageButton按下效果设计

来源:互联网 发布:淘宝现货指的是什么 编辑:程序博客网 时间:2024/05/01 10:50

 使用Button时为了让用户有“按下”的效果,有两种实现方式:
1.Java代码实现,按下时换背景图片(个人认为这种方法比较麻烦,得准备好几张背景):
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实现,也是换背景:
Java代码 
<?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/button_add" />     
    <item           android:state_pressed="true"   android:drawable="@drawable/button_add_pressed" />     
    <item           android:state_focused="true"    android:drawable="@drawable/button_add_pressed" />     
<item           android:drawable="@drawable/button_add" />     
</selector>     
   
<?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/button_add" />   
   
    <item            android:state_pressed="true"  android:drawable="@drawable/button_add_pressed" />   
    <item            android:state_focused="true"  android:drawable="@drawable/button_add_pressed" />   
    <item             android:drawable="@drawable/button_add" />   
</selector>    
 这个文件放在drawable目录下面。命名为button_add_x.xml,使用方法如下:
Xml代码 
<ImageButton     
                        android:id="@+id/ImageButton"     
                        android:layout_width="wrap_content"     
                        android:layout_height="wrap_content"     
                        android:background="#00000000"     
                        android:src="@drawable/button_add_x" >     
</ImageButton>     
<ImageButton   
                        android:id="@+id/ImageButton"   
                        android:layout_width="wrap_content"   
                        android:layout_height="wrap_content"   
                        android:background="#00000000"   
                        android:src="@drawable/button_add_x" >   
</ImageButton>   
 3.采用Drawable的颜色过滤,这种方法我最喜欢:
Java代码 
/**   
   * 按下这个按钮进行的颜色过滤   
   */     
  public final static float[] BT_SELECTED=new float[] {       
      2, 0, 0, 0, 2,       
      0, 2, 0, 0, 2,       
      0, 0, 2, 0, 2,       
      0, 0, 0, 1, 0 };      
        
  /**   
   * 按钮恢复原状的颜色过滤   
   */     
  public final static 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 };      
        
  /**   
   * 按钮焦点改变   
   */     
  public final static OnFocusChangeListener buttonOnFocusChangeListener=new OnFocusChangeListener() {      
        
  @Override     
  public void onFocusChange(View v, boolean hasFocus) {      
   if (hasFocus) {      
    v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));      
    v.setBackgroundDrawable(v.getBackground());      
   }      
   else     
   {      
    v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));      
     v.setBackgroundDrawable(v.getBackground());      
   }      
  }      
 };      
       
  /**   
   * 按钮触碰按下效果   
   */     
 public final static OnTouchListener buttonOnTouchListener=new OnTouchListener() {      
  @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;      
  }      
 };      
       
 /**   
  * 设置图片按钮获取焦点改变状态   
  * @param inImageButton   
  */     
 public final static void setButtonFocusChanged(View inView)      
 {      
  inView.setOnTouchListener(buttonOnTouchListener);      
  inView.setOnFocusChangeListener(buttonOnFocusChangeListener);      
 }     
/** 
   * 按下这个按钮进行的颜色过滤 
   */   
  public final static float[] BT_SELECTED=new float[] {    
      2, 0, 0, 0, 2,    
      0, 2, 0, 0, 2,    
      0, 0, 2, 0, 2,    
      0, 0, 0, 1, 0 };   
     
  /** 
   * 按钮恢复原状的颜色过滤 
   */   
  public final static 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 };   
     
  /** 
   * 按钮焦点改变 
   */   
  public final static OnFocusChangeListener buttonOnFocusChangeListener=new OnFocusChangeListener() {   
     
  @Override   
  public void onFocusChange(View v, boolean hasFocus) {   
   if (hasFocus) {   
    v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));   
    v.setBackgroundDrawable(v.getBackground());   
   }   
   else   
   {   
    v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));   
     v.setBackgroundDrawable(v.getBackground());   
   }   
  }   
 };   
    
  /** 
   * 按钮触碰按下效果 
   */   
 public final static OnTouchListener buttonOnTouchListener=new OnTouchListener() {   
  @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;   
  }   
 };   
    
 /** 
  * 设置图片按钮获取焦点改变状态 
  * @param inImageButton 
  */   
 public final static void setButtonFocusChanged(View inView)   
 {   
  inView.setOnTouchListener(buttonOnTouchListener);   
  inView.setOnFocusChangeListener(buttonOnFocusChangeListener);   
 }

 

摘自:http://zhaohaiyang.blog.51cto.com/2056753/521163