(Android基于回调机制的事件处理) onTouchEvent()方法

一.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清单文件中声明创建的类

在这里插入图片描述

在这里插入图片描述

运行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42768634/article/details/115122190