> Android在线手册 > 【Android 界面效果3】Android_UI_点击按钮切换背景效果实现

实现按钮按下和释放,按钮背景图片相应切换效果的方法这里介绍两种,一种是在代码里实现,另一种是在xml文件里实现

一、在xml文件里

首先现在layout的一个xml文件下定义Button如下所示:

[HTML] view plaincopy
  1. <Button
  2. android:id="@+id/btn_user_selected"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:background="@drawable/btn_selected/>

注意代码里的android:background="@drawable/btn_selected",这里btn_selecteddrawable文件下定义button按下释放效果的xml文件
接下来看btn_selected.xml文件的定义:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="Http://schemas.android.com/apk/res/android" >
  3. <!-- 获得焦点但未按下时的背景图片 -->
  4. <item android:state_focused="true" android:state_enabled="true" android:state_pressed="false" android:drawable="@drawable/user_selecte_n" />
  5. <!-- 按下时的背景图片 -->
  6. <item android:state_enabled="true" android:state_pressed="true" android:drawable="@drawable/user_selecte_p" />
  7. <!-- 按下时的背景图片 -->
  8. <item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/user_selecte_p" />
  9. <!-- 默认时的背景图片 -->
  10. <item android:drawable="@drawable/user_selecte_n" />
  11. </selector>

创建xml:点击drawable文件夹右键-->new-->Android XML File-->在File栏里填写xml名称-->Root Element下选择xml的背景选择器selector-->点击finish-->创建成功

相关属性:

android:state_selected :选中
android:state_focused
:获得焦点
android:state_pressed
:点击
android:state_enabled
:设置是否响应事件,指所有事件

selector背景选择器用法大全请跳转到:点击打开链接


二、在java代码里

[java] view plaincopy
  1. bottomReturnBtn.setOnTouchListener(new OnTouchListener() {
  2. public boolean onTouch(View v, MotionEvent event) {
  3. Button upStepBtn = (Button) v;
  4. if(event.getAction() == MotionEvent.ACTION_DOWN){
  5. upStepBtn.setBackgroundResource(R.drawable.bottom_sub_order_btn);
  6. }else if(event.getAction() == MotionEvent.ACTION_UP){
  7. upStepBtn.setBackgroundResource(R.drawable.bottom_return_check);
  8. finish();
  9. }
  10. return false;
  11. }
  12. });

通过监听按钮的不同状态来更改按钮的背景图片

public boolean onTouch(View v,MotionEvent event){

}

参数v:事件源对象

参数event:事件封装类的对象,其中封装了触发事件的详细信息,同样包括事件的类型、触发时间等信息。


event.getAction() == MotionEvent.ACTION_DOWN ======>按钮被按下

event.getAction() == MotionEvent.ACTION_UP ======>按钮被释放