六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 133|回复: 0

Android——ImageButton按下效果设计

[复制链接]

升级  54.33%

109

主题

109

主题

109

主题

举人

Rank: 3Rank: 3

积分
363
 楼主| 发表于 2013-1-30 04:29:36 | 显示全部楼层 |阅读模式
使用 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); 
 } 

 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表