Android——ImageButton按下效果设计

使用 Button 时为了让用户有“按下”的效果,有两种实现方式:

 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 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,使用方法如下:

<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的颜色过滤:

 

/**   
   * 按下这个按钮进行的颜色过滤   
   */    
  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://yueguc.javaeye.com/blog/939686

发表评论

电子邮件地址不会被公开。 必填项已用*标注