1.什么是Touch事件:
用户点按屏幕,Touch事件产生;用户的手指离开屏幕,Touch事件结束。Touch事件被封装在MotionEvent中。
touch事件
2.Touch是事件的类型:
事件类型 | 说明 |
---|---|
ACTION_DOWN | 手指按下 |
ACTION_UP | 手指离开屏幕 |
ACTION_MOVE | 手指在屏幕上移动 |
ACTION_POINTER_DOWN | 多手指按下 |
ACTION_POINTER_UP | 多手指抬起 |
ACTION_CANCEL | 取消点击事件 |
3.Touch事件的传递:
Touch事件传递时,从最下层开始向上层传递,也就是说出发点为Activity,逐层向上传递。Touch方法的返回值类型为Boolean类型,当返回值为true时,表示该事件被这个图层接收并消费了,事件不会继续传递;当返回值为false时,表示该事件被这个图层接收了,但不消费,事件还会继续往下传递。
4.常用方法:
方法 | 说明 |
---|---|
MotionEventgetAction() | 获取触摸事件,如:ACTION_DONW、ACTION_UP、ACTION_MOVE、以及ACTION_CANCEL 等 |
MotionEvent.getX() | 消费触摸点的View从触摸点到它最左侧的距离 |
MotionEvent.getY() | 消费触摸点的View从触摸点到它最上侧的距离 |
MotionEvent.getRawX() | 消费触摸点的View从触摸点到屏幕最左侧的距离 |
MotionEvent.getRawY() | 消费触摸点的View从触摸点到屏幕最左侧的距离 |
5.Touch事件的简单应用:
项目功能:创建一个图块获取Touch事件,使其跟随手指在屏幕上移动
第一步:在xml文件中创建一个红色视图:
//将布局方式改为相对布局
<RelativeLayout 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"
//给容器加ID,方便外部调用
android:id="@+id/rl">
<View
android:id="@+id/v"
android:layout_width="100dp"
android:layout_height="100dp"
//设置红色背景颜色
android:background="@color/colorAccent"/>
第二部:在MainActivity中找到容器、View视图,并重写onTouch方法:
//将视图和容器全局化
RelativeLayout rl;
View view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rl = findViewById(R.id.rl);
view = findViewById(R.id.v);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//获取触摸事件
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN){
// 获取触摸点坐标
int x = (int)event.getX();
int y = (int)event.getY();
// 改变视图坐标
view.setX(x);
view.setY(y);
}else if (action == MotionEvent.ACTION_MOVE){
// 获取触摸点坐标
int x = (int)event.getX();
int y = (int)event.getY();
// 改变视图坐标
view.setX(x);
view.setY(y);
}
return true;
}
}
网友评论