Android——ImageButton按下效果设计

来源:互联网 发布:sony相机软件下载 编辑:程序博客网 时间:2024/04/29 04:44

使用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

0 0
原创粉丝点击