Android onTouchEvent方法
onTouchEvent方法简介
前面已经介绍了手机键盘事件的处理方法,接下来将介绍手机屏幕事件的处理方法onTouchEvent。该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触摸事件。该方法的签名如下所示。
- public boolean onTouchEvent (MotionEvent event)
参数event:参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。
返回值:该方法的返回值机理与键盘响应事件的相同,同样是当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否则返回false。
该方法并不像之前介绍过的方法只处理一种事件,一般情况下以下三种情况的事件全部由onTouchEvent方法处理,只是三种情况中的动作值不同。
屏幕被按下:当屏幕被按下时,会自动调用该方法来处理事件,此时MotionEvent.getAction()的值为MotionEvent.ACTION_DOWN,如果在应用程序中需要处理屏幕被按下的事件,只需重新该回调方法,然后在方法中进行动作的判断即可。
屏幕被抬起:当触控笔离开屏幕时触发的事件,该事件同样需要onTouchEvent方法来捕捉,然后在方法中进行动作判断。当MotionEvent.getAction()的值为MotionEvent.ACTION_UP时,表示是屏幕被抬起的事件。
在屏幕中拖动:该方法还负责处理触控笔在屏幕上滑动的事件,同样是调用MotionEvent.getAction()方法来判断动作值是否为MotionEvent.ACTION_MOVE再进行处理。
接下来通过一个简单的案例介绍该方法的使用方法。在该案例中,会在用户点击的位置绘制一个矩形,然后监测用户触控笔的状态,当用户在屏幕上移动触控笔时,使矩形随之移动,而当用户触控笔离开手机屏幕时,停止绘制矩形。该案例的开发步骤如下。
Java代码:
- package eoe.demo;
- //声明所在包
- import android.app.Activity;
- //引入Activity类
- import android.content.Context;
- //引入Context类
- import android.graphics.Canvas;
- //引入Canvas类
- import android.graphics.Color;
- //引入Color类
- import android.graphics.Paint;
- //引入Paint类
- import android.os.Bundle;
- //引入Bundle类
- import android.view.MotionEvent;
- //引入MotionEvent类
- import android.view.View;
- //引入View类
- public class Sample_7_2 extends Activity {
- MyView myView;
- //自定义View的引用
- public void onCreate(Bundle savedInstanceState) {
- //重写的onCreate方法
- super.onCreate(savedInstanceState);
- myView = new MyView(this);
- //初始化自定义的View
- setContentView(myView);
- //设置当前显示的用户界面
- }
- @Override
- public boolean onTouchEvent(MotionEvent event){
- //重写的onTouchEvent回调方法
- switch(event.getAction()){
- case MotionEvent.ACTION_DOWN:
- //按下
- myView.x = (int) event.getX();
- //改变x坐标
- myView.y = (int) event.getY()-52;
- //改变y坐标
- myView.postInvalidate();
- //重绘
- break;
- case MotionEvent.ACTION_MOVE:
- //移动
- myView.x = (int) event.getX();
- //改变x坐标
- myView.y = (int) event.getY()-52;
- //改变y坐标
- myView.postInvalidate();
- //重绘
- break;
- case MotionEvent.ACTION_UP:
- //抬起
- myView.x = -100;
- //改变x坐标
- myView.y = -100;
- //改变y坐标
- myView.postInvalidate();
- //重绘
- break;
- }
- return super.onTouchEvent(event);
- }
- class MyView extends View{
- //自定义的View
- Paint paint;
- //画笔
- int x = 50;
- //x坐标
- int y = 50;
- //y坐标
- int w = 50;
- //矩形的宽度
- public MyView(Context context) {
- //构造器
- super(context);
- paint = new Paint();
- //初始化画笔
- }
- @Override
- protected void onDraw(Canvas canvas) {
- //绘制方法
- canvas.drawColor(Color.GRAY);
- //绘制背景色
- canvas.drawRect(x, y, x+w, y+w, paint);
- //绘制矩形
- super.onDraw(canvas);
- }
- }
- }
复制代码
第11行声明自定义View的引用,第12~16行重写Activity的onCreate方法,该方法会在此Activity创建时被系统调用,在方法中先初始化自定义的View,然后将当前的用户界面设置成该View。
第18~37行为重写的屏幕监听方法,在该方法中,根据事件动作的不同执行不同的操作。
第20~24行表示当前事件为屏幕被按下的事件,通过调用MotionEvent的getX()和getY()方法得到事件发生的坐标,然后设置给自定义View的x与y成员变量。
第25~29行表示在屏幕上滑动时的事件,同样是得到事件发生的位置并设置给View的x、y。需要注意的是,因为此时手机屏幕并不是全屏模式,所以需要对坐标进行调整。
第30~34行处理的是屏幕被抬起的事件,此时将View的x、y成员变量设成-100。表示并不需要在屏幕中绘制矩形。
第38~53行为自定义的View类,并重写了绘制方法onDraw。在第43~45行的构造器中初始化绘制时需要的画笔,然后在第48~52行的方法中根据成员变量x、y的值绘制绘制矩形。
提示:自定义的View并不会自动刷新,所以每次改变数据模型时都需要调用postInvalidate方法进行屏幕的刷新操作。关于自定义View的使用方法,将会在后面的章节中进行详细介绍,此处只是简单地使用。
Android onTouchEvent方法的更多相关文章
- Android onTouchEvent, onClick及onLongClick的调用机制
针对屏幕上的一个View控件,Android如何区分应当触发onTouchEvent,还是onClick,亦或是onLongClick事件? 在Android中,一次用户操作可以被不同的View按次序 ...
- onTouch事件试验(覆写onTouchEvent方法,同时设置onTouchListener)
xml布局文件 <</span>RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andro ...
- (转)onTouchEvent方法的使用
(转)onTouchEvent方法的使用 手机屏幕事件的处理方法onTouchEvent.该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触 ...
- onTouchEvent方法的使用
手机屏幕事件的处理方法onTouchEvent.该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触摸事件.该方法的签名如下所示. public ...
- Android onTouchEvent和setOnTouchListener中onTouch的区别
OnTouchEvent()方法 是获取的对屏幕的各种操作,比如向左向右滑动,点击返回按钮等等. 属于一个宏观的屏幕触摸监控. OnTouchListener()方法 是获取某一个控件某一个View的 ...
- OnScroll与OnTouchEvent方法的区别与联系
onScroll()方法和onTouchEvent()方法的执行过程应该是,先onTouchEvent()的ACTION_DOWN,然后是ACTION_MOVE和onScroll()方法同时进行,最后 ...
- Android Stuido 方法参数 p0,p1
Android Stuido 方法参数 p0,p1 参考文献 https://stackoverflow.com/questions/49219439/incorrect-variable-names ...
- android语音识别方法
http://www.apkbus.com/forum.php?mod=viewthread&tid=3473 android语音识别方法一:使用intent调用语音识别程序 1. 说明 以下 ...
- 蓝牙ble数据转语音实现Android AudioRecord方法推荐
蓝牙ble数据转语音实现Android AudioRecord方法推荐 教程 欢迎走进zozo的学习之旅. 概述 蓝牙BLE又称bluetooth smart,主打的是低功耗和快速链接,所以在支持的 ...
随机推荐
- Items divided
Items divided 题目链接:http://acm.xidian.edu.cn/problem.php?id=1183 参考:http://www.cnblogs.com/wanghetao/ ...
- mysql 初始化修改密码问题(Mac系统)
今天公司大牛帮我搞定了mysql初始化密码问题,纪录一下: ~ ps aux | grep mysqlMetro 7149 0.0 0.0 2432772 564 s000 R+ 7:16下午 0:0 ...
- 网站常用js代码搜集
1.若是手机端打开,则跳转到手机页面 <script language="javascript"> if(navigator.userAgent.match(/(iPh ...
- 在ashx处理程序中,如果返回json串数据?
可以通过一下代码: using System.Collections.Generic;using System.Web.Script.Serialization; SortedDictionary&l ...
- php 语音参考
如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记.这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图. ...
- Ubuntu安装Mysql过程及远程问题解决
ubuntu下执行 sudo apt-get instlll mysql-server sudo apt-get install mysql-client 安装过程中会有文字界面设置密码 牢记密码 M ...
- visual studio2013 改变匹配括号的颜色
改变匹配括号的颜色实现如下效果
- POJ 1065 Wooden Sticks#贪心+qsort用法
(- ̄▽ ̄)-* 这道题用到了cstdlib库的qsort()函数: 用法链接:http://www.cnblogs.com/syxchina/archive/2010/07/29/2197382.h ...
- csu oj Infected Computer 1427
#include <iostream> #include <algorithm> #include <stdio.h> #define max 20005 #def ...
- CevaEclipse - 常用设置
1. 往工程里面添加在硬盘上已有的文件 File -> Import.. -> General -> File System From directory Browse... 勾选需 ...