一、添加按钮(点击前vs点击后)

StateListDrawable是Drawable资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点,我们只需要将Button的background属性设置为该drawable资源即可轻松实现,按下按钮时不同的按钮颜色或背景
  1. 1.drawable:引用的Drawable位图<br /> 2.state_focused:是否获得焦点<br /> 3.state_pressed:控件是否被按下<br /> 4.state_enabled:控件是否可用<br /> 5.state_selected:控件是否被选择,针对有滚轮的情况<br /> 6.state_checked:控件是否被勾选<br /> 7.state_checkable:控件可否被勾选,egcheckbox<br /> 8.state_window_focused:是否获得窗口焦点<br /> 9.state_active:控件是否处于活动状态,egslidingTab<br /> 10.state_single:控件包含多个子控件时,确定是否只显示一个子控件<br /> 11.state_first:控件包含多个子控件时,确定第一个子控件是否处于显示状态<br /> 12.state_middle:控件包含多个子控件时,确定中间一个子控件是否处于显示状态<br /> 13.state_last:控件包含多个子控件时,确定最后一个子控件是否处于显示状态

注:按钮api29以上的直接背景无法显示,需到values下的styles.xml中的DuckActionBak后添加”.Bridge”即可显示背景颜色
  1. 1.在安卓系统中选择创建两个图片:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1574587/1621754576358-ddf2cda0-0f33-4771-b151-d583e3dcbf06.png#clientId=u324618ad-ac80-4&from=paste&height=340&id=ubf7e6c20&margin=%5Bobject%20Object%5D&name=image.png&originHeight=340&originWidth=776&originalType=binary&size=43091&status=done&style=none&taskId=u16fc39a7-aa02-4953-8685-8f77a1373d7&width=776)
  2. 2.drawable下创建选中前的按钮样式和选中后的按钮样式<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1574587/1621755584337-0d3f52c9-a807-4b70-867a-97455be4fc7d.png#clientId=u324618ad-ac80-4&from=paste&height=243&id=u8ddeffab&margin=%5Bobject%20Object%5D&name=image.png&originHeight=243&originWidth=1018&originalType=binary&size=37323&status=done&style=none&taskId=u89201af6-5fa8-43cd-bb82-f275dbeed80&width=1018)<br /> 3.创建color文件,在color下创建选中前的颜色和选中后的颜色之间的变化<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1574587/1621755700229-21d889a5-7f3b-40c0-b3a0-32e0f3141ebd.png#clientId=u324618ad-ac80-4&from=paste&height=261&id=u0e53ae9b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=261&originWidth=944&originalType=binary&size=36894&status=done&style=none&taskId=ud479f7c8-029b-4d36-9f2f-0d8c5662594&width=944)<br /> 4.在布局文件中添加该背景样式<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1574587/1621756516974-8565fe90-07d1-4f00-aa9b-52041e17b6df.png#clientId=u324618ad-ac80-4&from=paste&height=242&id=u4b9a3040&margin=%5Bobject%20Object%5D&name=image.png&originHeight=242&originWidth=645&originalType=binary&size=26322&status=done&style=none&taskId=u412f865d-997b-4cd0-934b-ad3e5da9e6d&width=645)<br /> 5.点击之后的样式<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1574587/1621756535393-b5e8c23a-4528-4bec-a703-56fcb9544fef.png#clientId=u324618ad-ac80-4&from=paste&height=223&id=u8730425c&margin=%5Bobject%20Object%5D&name=image.png&originHeight=223&originWidth=602&originalType=binary&size=24589&status=done&style=none&taskId=uaeb07329-6f47-4f3d-85ab-5dc6c870a30&width=602)

二、Button事件处理(点击事件、长按事件和触摸事件)

  1. package com.example.test;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.util.Log;
  5. import android.view.MotionEvent;
  6. import android.view.View;
  7. import android.widget.Button;
  8. public class MainActivity extends AppCompatActivity {
  9. private String TAG="he";
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. Button btn_one = findViewById(R.id.btn_one);
  15. //点击事件
  16. btn_one.setOnClickListener(new View.OnClickListener() {
  17. @Override
  18. public void onClick(View v) {
  19. Log.e(TAG, "onClick: " );
  20. }
  21. });
  22. //长按事件
  23. btn_one.setOnLongClickListener(new View.OnLongClickListener() {
  24. @Override
  25. public boolean onLongClick(View v) {
  26. Log.e(TAG, "onLongClick: " );
  27. return false;
  28. }
  29. });
  30. //触摸事件
  31. btn_one.setOnTouchListener(new View.OnTouchListener() {
  32. @Override
  33. public boolean onTouch(View v, MotionEvent event) {
  34. Log.e(TAG, "onTouch: "+event.getAction() );
  35. return false;
  36. }
  37. });
  38. }
  39. }

结果图:
image.png
注:MotionEvent内的触摸事件表示:
ACTION_DOWN:0
ACTION_UP:1
ACTION_MOVE:2