【2021 最新版】Android studio全套教程+Android(安卓)开发入门到精通(项目实战篇)_哔哩哔哩_bilibili
1.点击事件
2.长按事件
3.触摸事件
btn_color_selector.xml
btn_selector.xml
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn"
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_marginBottom="238dp"
android:background="@drawable/btn_selector"
android:backgroundTint="@color/btn_color_selector"
android:text="I am Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
打开MainActivity.java
Button btn = findViewById(R.id.btn);
给btn绑定一些事件
在重写的方法中打印日志:
输入loge回车
Alt+Insert
Create Constant Field “TAG”
选择:MainActivity
看一下MainActivity的代码:
package com.example.app03;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "leo";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.btn);
//点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e(TAG, "onClick: ");
}
});
//长按事件
btn.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.e(TAG, "onLongClick: ");
return false;
}
});
//触摸事件
btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//MotionEvent中有
//public static final int ACTION_DOWN = 0;
//public static final int ACTION_UP = 1;
//public static final int ACTION_MOVE = 2;
//......
Log.e(TAG, "onTouchClick: "+event.getAction());
return false;
}
});
}
}
1.当onTouch这个回调方法从默认的return false;改为return true;的时候,系统会处理onClick和onLongClick,不会再调用这两个方法了。
所以结果就是:你长按Button时候没有出现onLongClick的日志,说明被onTouchClick捕获并消费了这个事件
2.当onLongClick这个回调方法从默认的return false;改为return true;的时候,
顺序是:onTouch被执行,然后去执行onLongClick,发现onLongClick return true;的时候就不会去执行onClick了。
当
它就会在MainActivity.java中创建方法leoClick(实际上是替代了)
leoClick(实际上是替代了MainActivity.java中的下面的代码)
//点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e(TAG, "onClick: ");
}
});
最后MainActivity.java:
package com.example.app03;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "leo";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.btn);
//点击事件//被leoCLick替代,此处注释。
// btn.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// Log.e(TAG, "onClick: ");
// }
// });
//长按事件
btn.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.e(TAG, "onLongClick: ");
return false;
}
});
//触摸事件
btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//MotionEvent中有
//public static final int ACTION_DOWN = 0;
//public static final int ACTION_UP = 1;
//public static final int ACTION_MOVE = 2;
//......
Log.e(TAG, "onTouchClick: "+event.getAction());
return false;
}
});
}
public void leoClick(View view) {
Log.e(TAG, "onClick: ");
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn"
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_marginBottom="238dp"
android:background="@drawable/btn_selector"
android:backgroundTint="@color/btn_color_selector"
android:text="I am Button"
android:onClick="leoClick"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
最终效果