android中的button动画效果

首先看看网上的2种方法:

【以下为引用网络,来源:http://www.eoeandroid.com/thread-7931-1-1.html

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

1.在代码里面。

[java] view plaincopy
  1. imageButton.setOnTouchListener(new OnTouchListener(){     
  2.                         @Override    
  3.                         public boolean onTouch(View v, MotionEvent event) {     
  4.                                 if(event.getAction() == MotionEvent.ACTION_DOWN){     
  5.                                         //更改为按下时的背景图片     
  6.                                         v.setBackgroundResource(R.drawable.pressed);     
  7.                                 }else if(event.getAction() == MotionEvent.ACTION_UP){     
  8.                                         //改为抬起时的图片     
  9.                                         v.setBackgroundResource(R.drawable.released);     
  10.                                 }     
  11.                                 return false;     
  12.                         }     
  13.                 });    
  14. imageButton.setOnTouchListener(new OnTouchListener(){  
  15.                         @Override  
  16.                         public boolean onTouch(View v, MotionEvent event) {  
  17.                                 if(event.getAction() == MotionEvent.ACTION_DOWN){  
  18.                                         //更改为按下时的背景图片  
  19.                                         v.setBackgroundResource(R.drawable.pressed);  
  20.                                 }else if(event.getAction() == MotionEvent.ACTION_UP){  
  21.                                         //改为抬起时的图片  
  22.                                         v.setBackgroundResource(R.drawable.released);  
  23.                                 }  
  24.                                 return false;  
  25.                         }   
  26.                 });   
  

 

2.用XML文件实现。

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">    
  3.     <item           android:state_pressed="false"  android:drawable="@drawable/button_add" />    
  4.     <item           android:state_pressed="true"   android:drawable="@drawable/button_add_pressed" />    
  5.     <item           android:state_focused="true"    android:drawable="@drawable/button_add_pressed" />    
  6. <item           android:drawable="@drawable/button_add" />    
  7. </selector>    
  8.   
  9. <?xml version="1.0" encoding="UTF-8"?>  
  10. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  11. <item           android:state_pressed="false"  android:drawable="@drawable/button_add" />  
  12.   
  13.     <item            android:state_pressed="true"  android:drawable="@drawable/button_add_pressed" />  
  14.     <item            android:state_focused="true"  android:drawable="@drawable/button_add_pressed" />  
  15.     <item             android:drawable="@drawable/button_add" />  
  16. </selector>   
  

 

这个文件放在drawable目录下面。命名为button_add_x.xml

使用的时候

[xhtml] view plaincopy
  1. <ImageButton    
  2.                         android:id="@+id/ImageButton"    
  3.                         android:layout_width="wrap_content"    
  4.                         android:layout_height="wrap_content"    
  5.                         android:background="#00000000"    
  6.                         android:src="@drawable/button_add_x" >    
  7. </ImageButton>    
  8. <ImageButton  
  9.                         android:id="@+id/ImageButton"  
  10.                         android:layout_width="wrap_content"  
  11.                         android:layout_height="wrap_content"  
  12.                         android:background="#00000000"  
  13.                         android:src="@drawable/button_add_x" >  
  14. </ImageButton>   

 

【以上为引用网络,来源:http://www.eoeandroid.com/thread-7931-1-1.html

 

【以下为原创,转载请注明出处:http://blog.csdn.net/sytzz/archive/2010/06/16/5673662.aspx

 

我自己摸索摸索,发现这样的实现过程虽然通用性好,但是很麻烦,一个按钮实现效果需要多张图片甚至再加一个布局…

 

那一个游戏要是有几百个按钮怎么办呢?

 

于是:以下代码被酝酿出来了:

 

[java] view plaincopy
  1. /**   
  2.    * 按下这个按钮进行的颜色过滤   
  3.    */    
  4.   public final static float[] BT_SELECTED=new float[] {      
  5.       20002,      
  6.       02002,      
  7.       00202,      
  8.       00010 };     
  9.        
  10.   /**   
  11.    * 按钮恢复原状的颜色过滤   
  12.    */    
  13.   public final static float[] BT_NOT_SELECTED=new float[] {      
  14.       10000,      
  15.       01000,      
  16.       00100,      
  17.       00010 };     
  18.        
  19.   /**   
  20.    * 按钮焦点改变   
  21.    */    
  22.   public final static OnFocusChangeListener buttonOnFocusChangeListener=new OnFocusChangeListener() {     
  23.        
  24.   @Override    
  25.   public void onFocusChange(View v, boolean hasFocus) {     
  26.    if (hasFocus) {     
  27.     v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));     
  28.     v.setBackgroundDrawable(v.getBackground());     
  29.    }     
  30.    else    
  31.    {     
  32.     v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));     
  33.      v.setBackgroundDrawable(v.getBackground());     
  34.    }     
  35.   }     
  36.  };     
  37.       
  38.   /**   
  39.    * 按钮触碰按下效果   
  40.    */    
  41.  public final static OnTouchListener buttonOnTouchListener=new OnTouchListener() {     
  42.   @Override    
  43.   public boolean onTouch(View v, MotionEvent event) {     
  44.    if(event.getAction() == MotionEvent.ACTION_DOWN){     
  45.     v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));     
  46.     v.setBackgroundDrawable(v.getBackground());     
  47.     }     
  48.     else if(event.getAction() == MotionEvent.ACTION_UP){     
  49.      v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));     
  50.      v.setBackgroundDrawable(v.getBackground());     
  51.     }     
  52.    return false;     
  53.   }     
  54.  };     
  55.       
  56.  /**   
  57.   * 设置图片按钮获取焦点改变状态   
  58.   * @param inImageButton   
  59.   */    
  60.  public final static void setButtonFocusChanged(View inView)     
  61.  {     
  62.   inView.setOnTouchListener(buttonOnTouchListener);     
  63.   inView.setOnFocusChangeListener(buttonOnFocusChangeListener);     
  64.  }    
  

使用时,调用方法

public final static void setButtonFocusChanged(View inView)

即可。

 

【原理】

 

利用Drawable类的setColorFilter方法对图片进行颜色偏移过滤处理。

 

 

以下为效果图,登陆按钮此时为获取焦点状态。

 

 

 

代码可以适当修改实现3个不同的状态:正常,获取焦点,点击。

 

【以上为原创,转载请注明出处:http://blog.csdn.net/sytzz/archive/2010/06/16/5673662.aspx

 

附docx文件下载】需要收费,您的支持就是我的动力,谢谢啦

 http://www.docin.com/DocinViewer-60345763-144.swf

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值