一.实现点击按钮换图标、颜色
1.在activity_main.xml
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/bu_one"
android:background="@drawable/btn_selector"
android:layout_width="200dp"
android:layout_height="100dp"
android:backgroundTint="@color/btn_color_selector"
/>
图标和背景色都是selector,路径分别为drawable下的btn_selector和color下的btn_color_selctor,在下面会手动创建
2.在res
在res中新建Directory,命名为color,在color文件夹下新建resource_file,命名为btn_color_selector(命名可以随意)放置转变颜色的selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/red" android:state_pressed="true"/>
<item android:color="@color/colorPrimaryDark"/>
</selector>
@color/red或@color/colorPrimaryDark都是values文件夹下的colors.xml文件中设置好的
在res下原有的drawable文件夹下新建resource_file,命名为btn_selector(命名可以随意),放置转变图标的selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_baseline_accessibility_24" android:state_pressed="true"/>
<item android:drawable="@drawable/ic_launcher_foreground"/>
</selector>
图标可以通过右键drawable选择vector asset添加新图标
建好的文件夹结构
二.点击、触摸、长按事件
在MainActivity中
private static final String TAG="la";
Button bu_one=findViewById(R.id.bu_one);
//点击事件
bu_one.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e(TAG, "onClick: ");//快捷键loge
}
});
//长按事件
bu_one.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
Log.e(TAG, "onLongClick: " );
return false;
}
});
//触摸事件
bu_one.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Log.e(TAG, "onTouch: "+ motionEvent.getAction());
return false;
}
});
如果return true,就会形成消费事件,导致只执行返回值以下的代码,以上的部分不会执行。例如:长按事件返回true,则触摸事件和长按事件会被执行,但是点击事件不会执行。