文章目录

前言

一、安卓事件触摸概述

1、触摸分类

2、触摸动作

3、触摸监听器

4、触摸方法

5、触点个数与坐标

6、安卓触摸事件处理机制

二、使用步骤讲解

1.创建安卓应用

3、字符串资源文件

4、主布局资源文件

5、主界面类实现功能

6、启动应用,查看效果​编辑

总结


前言

  • 在Android系统中,触摸是用户最常用,最基础的交互方式,只有弄通触摸事件在系统中的传递处理机制才能更好地增强用户的交互体验。触摸事件是安卓应用十分常用的事件,可以分为单点触摸和多点触摸。

一、安卓事件触摸概述

1、触摸分类

(1)单点触摸
单点触控,只能识别和支持每次一个手指的触控、点击,若同时有两个以上的点被触碰,就不能做出正确反应。很多医院、图书馆等的大厅都有这种触控技术的电脑,支持触摸屏的手机、MP3、数码相机也多采用这种单点触控技术。
(2)多点触摸
多点触控(又称多重触控、多点感应、多重感应,英文Multitouch或Multi-Touch)是采用人机交互技术与硬件设备共同实现的技术,能在没有传统输入设备(如鼠标、键盘等)。下进行计算机的人机交互操作。多点触摸技术,能构成一个触摸屏(屏幕,桌面,墙壁等)或触控板,都能够同时接受来自屏幕上多个点进行计算机的人机交互操作。

2、触摸动作

动作 常量
按下 MotionEvent.ACTION_DOWN
移动 MotionEvent.ACTION_MOVE
放开 MotionEvent.ACTION_UP

3、触摸监听器

触摸监听器 - onTouchListener - 接口

4、触摸方法

在onTouch()抽象 方法里,我们可以根据不同动作编写不同事件处理代码。

5、触点个数与坐标

通过MotionEvent对象的getX()和getY()方法可以获得触摸点的坐标。如果是多点触摸,通过getPointerCount()获取触点个数,然后通过getX(pointerIndex)与getY(pointerIndex)获得某个触点的坐标。

6、安卓触摸事件处理机制

触摸事件从view树的根节点开始一直传递到最下层,直到某个onTouchEvent()接收处理此事件。每个部分对触摸事件的处理过程如下:
Activity的处理过程: Activity.dispatchTouchEvent()最先被调用,其作用是调用RootView(通常是一个ViewGroup)的dispatchTouchEvent(),即负责分发事件。ViewGroup中的dispatch会调用其他孩子的dispatchTouchEvent()。注意:Activity中的onTouchEvent()是整个View的触摸事件传递链条的终点,不过前提是整个过程中没有view的touchEvent对此事件感兴趣。
View的处理过程: 检查是否有TouchListener()注册在这个View中,如果有则查看其是否想要消费此次事件,如果不消费事件,那么接下来该View的onTouchEvent()就要被调用了,如果未返回true,事件就会返回视图树的上一层。
ViewGroup的处理过程: 根据触摸发生的位置来判断哪些孩子可能会触发触摸事件,如果有重叠部分则按照被加入到ViewGroup中顺序的逆序来依次处理。ViewGroup可以引发一个中断(onInterceptTouchEvent())来强制把事件交给自己处理,当子视图的事件被剥夺时,子视图会收到ACTION_CANCEL事件,子视图可以用requestDisallowTouchIntercept()方法来屏蔽这个事件。
由此可见,Touch事件是层层向下传递的,如果某个视图接收了此事件则接下来的视图就无法再次接收,但ViewGroup可以强制从子视图手中剥夺一个触摸事件。

二、使用步骤讲解

1.创建安卓应用

Empty Activity模板创建安卓应用 - MoveMickeyByTouch

单击【Finish】按钮

2.准备图片素材

将背景图片与米老鼠图片,拷贝到drawable目录里

3、字符串资源文件

字符串资源文件 - strings.xml

4、主布局资源文件

主布局资源文件 - activity_main.xml

查看预览效果

5、主界面类实现功能

主界面类 - MainActivity

声明变量和常量

通过资源标识符获取控件实例

让根布局获取焦点

获取米老鼠图像控件的布局参数

给线性根布局注册触摸监听器

完整源代码如下:

package net.lgh.move_mickey_by_touch;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;public class MainActivity extends AppCompatActivity {private LinearLayout root; // 线性根布局private ImageView ivMickey; // 米老鼠图像控件private LinearLayout.LayoutParams layoutParams; // 布局参数private static final String TAG = "move_mickey_by_touch"; // 标记常量@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 利用布局资源文件设置用户界面setContentView(R.layout.activity_main);// 通过资源标识符获取控件实例root = findViewById(R.id.root);ivMickey = findViewById(R.id.iv_mickey);// 让根布局获取焦点root.setFocusable(true);root.requestFocus();// 获取米老鼠图像控件的布局参数layoutParams = (LinearLayout.LayoutParams) ivMickey.getLayoutParams();// 给线性根布局注册触摸监听器,实现触摸监听器接口,编写触摸事件代码root.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {// 根据不同触摸动作执行不同操作switch (event.getAction()) {case MotionEvent.ACTION_DOWN: // 0, 触点按下// 调试信息输出触点坐标Log.d(TAG, "ACTION_DOWN(" + event.getX() + ", " + event.getY() + ")");break;case MotionEvent.ACTION_MOVE: // 2, 触点移动// 调试信息输出触点坐标Log.d(TAG, "ACTION_MOVE(" + event.getX() + ", " + event.getY() + ")");break;case MotionEvent.ACTION_UP: // 1, 触点放开// 调试信息输出触点坐标Log.d(TAG, "ACTION_UP(" + event.getX() + ", " + event.getY() + ")");break;}// 根据变化的触点坐标来更新米老鼠图像控件的布局参数layoutParams.leftMargin = (int) event.getX();layoutParams.topMargin = (int) event.getY();// 重新设置米老鼠图像控件的布局参数ivMickey.setLayoutParams(layoutParams);return true; // 设置为true,三个事件:down-->move-->up才会依次执行}});}
}

6、启动应用,查看效果


可以拖动米老鼠在屏幕上移动

总结

Android系统中,触摸是用户最常用,最基础的交互方式,只有弄通触摸事件在系统中的传递处理机制才能更好地增强用户的交互体验。只有学会配置触摸事件,才能更好的实现功能的应用。

安卓编程基础——触摸事件相关推荐

  1. [.net 面向对象编程基础] (22) 事件

    [.net 面向对象编程基础] (22)  事件 事件(Event)是学习.net面向对象编程很重要的一部分,在学习事件之前,我们实际上已经在很多地方使用了事件,比如控件的click事件等,这些都是. ...

  2. 安卓编程基础——手势编程

    目录 前言 (一)安卓手势操作原理 (二)安卓手势类与接口 二.利用手势切换图片 1.创建安卓应用 3.字符串资源文件 4.主布局资源文件 5.主界面类实现功能 6.启动应用,查看效果 总结 前言 现 ...

  3. LabVIEW编程基础:事件结构框架编程

    LabVIEW又称为G语言,简单易学.形象直观,采用图形化的编程方式,是专为测试.测量和控制应用而设计的系统工程软件. 前面几篇文章依次讲解了LabVIEW中顺序顺序结构.条件结构及循环结构的编程方法 ...

  4. 安卓编程基础——菜单

    前言:学习目标 知道三种菜单使用场景 能够正确使用三种菜单 一.新课讲解 菜单在安卓应用程序中占有比较重要的位置.原生安卓提供了三种类型的菜单:选项菜单(OptionsMenu).上下文菜单(Cont ...

  5. 安卓编程基础——列表

    零.本讲学习目标 理解列表视图的四大组成元素 能使用基于数组适配器的列表视图 能使用基于简单适配器的列表视图 能使用基于基适配器的列表视图 一.导入新课 列表视图是基于适配器的供用户从多个选项中进行选 ...

  6. 安卓编程基础——标签

    目录 前言 (一)继承关系图 (二)标签常用属性 (三)教学案例:标签演示 1.创建安卓应用 2.字符串资源文件 3.自定义边框配置文件 4.主布局资源文件 5.主界面类实现功能 6.启动应用,查看效 ...

  7. 安卓编程基础——网格布局

    目录 前言 一.新课讲解 (一)网格布局概述 1.布局特点 2.继承关系图 3.常用属性 (二)案例演示:计算器界面 1.创建安卓应用 2.准备背景图片 3.字符串资源文件 4.自定义边框配置文件 5 ...

  8. Android基础学习笔记13:安卓触摸事件触摸按键

    学习目标 了解安卓触摸动作 熟悉触摸监听器与方法 掌握单点触摸与多点触摸 在Android系统中,触摸是用户最常用,最基础的交互方式,只有弄通触摸事件在系统中的传递处理机制才能更好地增强用户的交互体验 ...

  9. Android Studio笔记4.2 安卓触摸事件

    文章目录 一.前言 二.笔记4.2 安卓触摸事件 (一)安卓触摸事件概述 1.触摸分类 (1).单点触摸 (2).多点触摸 2.触摸动作 3.触摸监听器 4.触摸方法 5.触点个数与坐标 6.安卓触摸 ...

最新文章

  1. linux自动挂载usb光驱,Linux下使用Usbmount实现USB设备自动挂载
  2. Linux自定义命令
  3. 线程池原理及创建(C++实现)
  4. JavaScript初学者必看“new”
  5. Python: 使用装饰器“@”取得函数执行时间
  6. mysql新增列并同时增加数据_图解MySQL | 「原理解析」 MySQL 为表添加列 是怎么立刻完成的...
  7. NC / Netcat - 文件传输
  8. spark 运行自带python示例的方式
  9. Remove_if 删除vector数据
  10. win10鼠标灵敏度怎么调_和平精英,灵敏度到底怎么调?小编视频来教你!
  11. struts2和hibernate的简单新闻发布系统_点赞!北斗卫星导航系统28nm工艺芯片已量产,全球范围定位精度优于10米...
  12. Flutter 混合开发
  13. C#基础知识(停止更新、移步博客园)
  14. 小学教师计算机个人研修计划,小学教师信息技术个人研修计划书
  15. threejs 特效,自定义发光墙体,贴图动画版本。发光围栏。
  16. ue4 培养罐液体效果
  17. Window10 应用商店闪退问题
  18. java导入excel组件_三十五、Java中常见解析Excel引入的XXE组件复现与分析
  19. 配置法 求解1D第二类线性的Fredholm积分方程 +MATLAB
  20. 2021-11-01天视通常见故障汇总

热门文章

  1. 2022年平平常常的一天
  2. 产业洞察丨AWS和凯捷:“老”朋友的“新”合作
  3. 编程基础知识、算法(一)
  4. JavaCV进阶opencv图像检测识别:摄像头图像人脸检测
  5. iOS狂暴之路 开始篇 ---学习路线总结
  6. 数据是怎么传输的?什么是数据通信?
  7. ubuntu打开visio文件的方式
  8. 昆明,成都,重庆(2007-06-12 13:26:39)
  9. c51语言双精度浮点数,C51浮点数显示、浮点数表示方法(示例代码)
  10. 顶级游戏设计大师谈如何成为一名游戏设计师!