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);
   } 

 

转:http://yueguc.iteye.com/blog/939686

原文地址:https://www.cnblogs.com/jiezzy/p/2633496.html