知识点:

1、 Android开发中的运动事件:触摸屏(TouchScreen)和滚动球(TrackBall)

2、对运动事件的处理:MotionEvent

3、触摸时必发的三个MotionEvent动作常量:

  MotionEvent.ACTION_DOWN:初次触摸时触发

  MotionEvent.ACTION_UP:离开触摸时触发

  MotionEvent.ACTION_MOVE:触摸移动时触发

注:一个正常的触摸事件有ACTION_DOWN开始,中间可以存在0个或几个ACTOIN_MOVE,最后以ACTION_UP结束,开始触摸-->(移动)-->停止触摸。

4、其他MotionEvent常量:

  MotionEvent.ACTION_CANCEL:此事件不由用户触发,而是由系统在需要的时候触发,例如当父view打断触摸事件(onInterceptTouchEvent()返回true),从子view拿回处理事件的控制权时,就会给子view发一个ACTION_CANCEL事件,子view就再也不会收到后续事件了。

  MotionEvent.ACTION_OUTSIDE:触摸超出正常UI边界时触发

  MotionEvent.ACTION_SCROLL:非触摸滚动,主要由鼠标、滚轮、轨迹球触发

  有多个触摸点时触发:

  MotionEvent.ACTION_POINTER_DOWN:当屏幕上至少有一个点被触摸时,此事如果再新按下一个触摸点,就会触发该事件

  MotionEvent.ACTION_POINTER_UP:当屏幕上至少有两个点被触摸时,松开其中的一个触摸点,该事件就会被触发

5、MotionEvent类常用的方法:

  getAction():返回动作类型

  getX()、getY():触摸点的相对坐标(相对于视图左上角的坐标)

  getRawX()、getRawY():相对于屏幕的绝对坐标

  getSize():触摸点的接触范围(指压范围)

  getPressure():压力值,0-1之间,看情况,可能始终返回1,这个由驱动和物理硬件决定

  getEdgeFlags():当事件类型是ActionDown时可以通过此方法获得边缘标记(EDGE_LEFT,EDGE_TOP,EDGE_RIGHT,EDGE_BOTTOM),但是看设备情况,很可能始终返回0

  getDownTime():获取接触触摸点的时间

  getEventTime():获取触摸事件结束的时间

  getActionMasked():多点触控获取经过掩码后的动作类型

  getActionIndex():多点触控获取经过掩码和平移后的索引

  getPointerCount():获取触摸点的数量,比如2则可能是两个手指同时按压屏幕

  getPointerId(nId):对于每个触点的细节,我们可以通过一个循环执行getPointerId方法获取索引

  getX(nID)、getY(nID):获取第nID个触点的位置

  getPressure(nId):获取第nID个触点的指压

拓展:getAction()和getActionMasked()的区别:

  对单点触控,getAction()返回值和getActionMasked()是相同的。对多点触控,getAction()返回值和getActionMasked()返回值稍有不同。

  多点触控:多点触控时因为增加了本次触摸的索引,所以改用16位二进制数,如0x0001,低8位代表动作类型信息,高8位代表触摸点的索引信息(触控点的位置信息)

    例如:值为0x0000,表示是第一个触控点的ACTION_DOWN操作;值是0x0100,表示是第二个触控点的ACTION_DOWN操作;第三个ACTION_DOWN操作:0x0200。

6、设置触摸事件的方式有两种:

  一是委托式:创建一个监听器:View.OnTouchListener接口,实现onTouch()方法,方法中传入MotionEvent参数和View参数

  二是回调式:自定义一个View类实现实现OnTouchListener接口

代码如下:

1、java源码:

 package com.example.movetest;

 import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
//触摸事件的处理方式二:自定义类实现OnTouchListener接口
public class MainActivity extends Activity{
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView)findViewById(R.id.textview);
//设置监听:
textView.setOnTouchListener(new MyView());
} //自定义类实现OnTouchListener接口
public class MyView implements OnTouchListener{
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
//String string="X="+String.valueOf(arg1.getX())+",Y="+String.valueOf(arg1.getY());
//textView.setText(string);
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN:
textView.setText("ACTION_DOWN");
break;
default:
break;
}
return false;
}
}
} /*
//触摸事件处理方式一:创建OnTouchListener监听器
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textView=(TextView)findViewById(R.id.textview);
textView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
Log.d("TAG","onTouch action"+arg1.getAction()); //打印日志
//将textview显示的数据换成触摸点的位置坐标
String string="X="+String.valueOf(arg1.getX())+",Y="+String.valueOf(arg1.getY());
textView.setText(string);//重置TextView文本显示
return false;
}
});
}
}
*/ 

2、activity_main.xml代码如下:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.movetest.MainActivity" > <TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="触摸事件" /> </RelativeLayout>

3、AndroidManifest.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.movetest"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="22" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>

Android学习之触点事件的处理的更多相关文章

  1. Android学习之六种事件响应方法汇总

    java源码如下: 1.MainActivity.java源码 package com.example.responsetest; import android.app.Activity; impor ...

  2. Android学习之键盘事件

    java代码: package com.example.keyboardtest; import android.app.Activity; import android.os.Bundle; imp ...

  3. Android学习笔记触摸事件

    案例代码: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Relativ ...

  4. Android学习笔记--处理UI事件

    Handling UI Events 在Android里, 有不只一种方式可以截获用户与你的应用程序交互的事件. 在你的界面上处理事件时,你需要捕获用户与某个View实例交互时所产生的事件.View类 ...

  5. [学习总结]5、Android的ViewGroup中事件的传递机制(二)

    下面是第一篇的连接 Android的ViewGroup中事件的传递机制(一) 关于onInterceptTouchEvent和onTouchEvent的详细解释. 1 public class Mai ...

  6. [学习总结]4、Android的ViewGroup中事件的传递机制(一)

    本文主要针对dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent三个方法,通过简单的例子来简单的介绍下. 根据字面意思的理解,dispatchTo ...

  7. Android学习-----Button点击事件几种写法

    Button点击事件:大概可以分为以下几种: 匿名内部类 定义内部类,实现OnClickListener接口 定义的构造方法 用Activity实现OnClickListener接口 指定Button ...

  8. Android学习路线总结,绝对干货

    title: Android学习路线总结,绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一.前言 不 ...

  9. 九、Android学习第八天——广播机制与WIFI网络操作(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 九.Android学习第八天——广播机制与WIFI网络操作 今天熟悉了An ...

随机推荐

  1. UdPloyer交付系统设计思路

    宏观愿景: 一键搞定项目依赖环境,将软件交付过程管理化,实现DevOps研发测试运维一体化. 一.一站式版本交付生命周期管理  业务线[私有权限] 1.SVN源码交付 合主干.版本归档.拉分支.版本回 ...

  2. blfs(systemd版本)学习笔记-总页

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemd版本)学习笔记:https://www.cnblogs.com/renren-study-notes/p/ ...

  3. c语言学习笔记-break

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.break使用中的注意事项 1.break如果用于循环,用来终止循环. 2.break如果用于switch,则用于终止swi ...

  4. git 本地仓库与远程仓库建立连接

    我们在使用git clone的时候可能会报错: Could not read from remote repository.Please make sure you have the correct ...

  5. JS--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

  6. JavaScript与正则表达式

    正则表达式的定义 正则表达式与字符串对象相关的方法  相关示例 一.正则表达式(regular expression简称res) 1.定义: 一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成 ...

  7. Java数据解析---JSON

    一.Java数据解析分为:XML解析和JSON解析 XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便 JSON解析基于两种结构: 1.键值对类型 { ...

  8. 《Inside C#》笔记(八) 接口

    接口可以认为是属于不同继承树的代码之间的行为约定.C#的接口相当于是一种特殊的抽象类,这种抽象类的内部只有虚方法. 一 接口的使用 a) 接口内部可以包含方法.属性.索引器和事件,这些成员都不在接口中 ...

  9. 浅谈 Mysql 中的索引

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  10. 手把手教你撸一个简易的 webpack

    背景 随着前端复杂度的不断提升,诞生出很多打包工具,比如最先的grunt,gulp.到后来的webpack和Parcel.但是目前很多脚手架工具,比如vue-cli已经帮我们集成了一些构建工具的使用. ...