一.onTouchEvent()方法简介
onTouchEvent()方法则主要针对手机屏幕事件的处理。 onTouchEvent()方法在View类中定义,并且所有的View都重写了该方法,应用程序可以通过onTouchEvent()方法来处理手机屏幕的触摸事件。onTouchEvent()方法的签名如下所示。
public boolean onTouchEvent (MotionEvent event)
- 参数event是一个手机屏幕触摸事件封装类的对象,用于封装件的相关信息﹐例如触摸的位置﹑触摸的类型以及触摸的时间等。在用户触摸手机屏幕时由系统创建event对象
- onTouchEvent()方法可以处理多种事件。一般情况下﹐屏幕中的按下,抬起和拖动事件均可由onTouchEvent()方法进行处理,只是每种情况中的动作值有所不同。
- 屏幕被按下:会自动调用onTouchEvent()方法来处理事件,此时MotionEvent.getAction()的值为MotionEvent.ACTION_DOWN,如果在应用程序中需要处理屏幕被按下的事件,只需重写该回调方法,并在方法中进行动作的判断即可。
- 触摸动作抬起: 离开屏幕时所触发的事件,该事件需要onTouchEvent()方法来捕捉,并在该方法中进行动作判断。当 MotionEvent. getAction()的值为MotionEvent.ACTION_UP时,表示触发的是屏幕被抬起的事件。
- 在屏幕中拖动: onTouchEvent()方法还用于处理在屏幕上滑动的事件,根据MotionEvent. getAction()方法的返回值来判断动作值是否为MotionEvent. ACTION.MOVE,然后进行相应的处理。
二.代码演示
通过一个简单例子来演示onTouchEvent()方法的使用。在用户单击的位置绘制一个矩形﹐然后监测用户触摸的状态,当用户在屏幕上移动手指时,使矩形随之移动,而当用户手指离开手机屏幕时,停止绘制矩形。
方法如下
代码如下所示
package com.qst.demo2;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
public class keyTouchActivity extends AppCompatActivity {
TouchView touchView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
touchView = new TouchView(this); //初始化自定义的view
setContentView(touchView);
}
//重写onTouchEvent回调方法
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: //手指按下
touchView.x = (int) event.getX(); //改变x坐标
touchView.y = (int) event.getY() - 52 ; //改变y坐标
touchView.postInvalidate(); //重绘
break;
case MotionEvent.ACTION_MOVE:
touchView.x = (int) event.getX(); //手指移动
touchView.y = (int) event.getY(); //该表x坐标
touchView.postInvalidate(); //重绘
break;
case MotionEvent.ACTION_UP: //手指抬起
touchView.x = -100; //改变x坐标
touchView.y = -100; //改变y坐标
touchView.postInvalidate(); //重绘
break;
}
return super.onTouchEvent(event);
}
//定义View的子类
class TouchView extends View {
Paint paint; //画笔
int x = 300; //x坐标
int y = 300; //y坐标
int width = 100; //矩形的宽度
public TouchView(keyTouchActivity context) {
super(context);
paint = new Paint(); //创建画笔对象,初始化
}
@Override
protected void onDraw(Canvas canvas) {
//重写绘制方法
canvas.drawColor(Color.WHITE); //绘制背景色
canvas.drawRect(x, y, x + width, y + width, paint); //绘制矩形
super.onDraw(canvas); //调用父类的方法
}
}
}
在AndroidMainfest.xml清单文件中声明创建的类
运行结果