文章不完善,完善之后会移除此处提示!!!
惭愧惭愧,2020年了都没完善,打脸啊 ,先修补修补 ~

  • 基础概念
  • 使用分析
  • 场景
    • 案例
      • 点击监听
      • 动作监听
    • 分析

基础概念

onTouchEvent是手机屏幕事件的处理方法,属于一个宏观的屏幕触摸监控,可获取的对屏幕的各种操作,比如向左向右滑动,点击返回按钮等等;

onTouchEvent方法是override(重写) 的Activity的方法。重写Activity的onTouchEvent方法后,当屏幕有touch事件时,此方法就会被调用;

  • onTouchEvent是activity中的方法
  • onTouch是view中的接口回调的方法

从上图我们可以看到onTouch()是OnTouchListener接口的方法,它是获取某一个控件的触摸事件,因此使用时,必须使用setOnTouchListener绑定到控件,然后才能鉴定该控件的触摸事件。当一个View绑定了OnTouchLister后,当有touch事件触发时,就会调用onTouch方法。

我们可以通过getAction()方法获取当前触摸状态:

  • ACTION_DOWN:表示按下了屏幕的状态
  • ACTION_MOVE :表示为移动手势
  • ACTION_UP :表示为离开屏幕
  • ACTION_CANCEL :表示取消手势,不会由用户产生,而是由程序产生的

使用分析

场景

在同个Activity下实现onTouch方法与重写onTouchEvent方法

案例
点击监听
package com.example.yongliu.onthouchstudy;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private TextView mBtn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mBtn = findViewById(R.id.btn);mBtn.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View view, MotionEvent motionEvent) {Toast.makeText(MainActivity.this,"控件内部的触摸事件 ACTION",Toast.LENGTH_SHORT).show();return true;}});}@Overridepublic boolean onTouchEvent(MotionEvent event) {Toast.makeText(MainActivity.this,"控件之外的触摸事件",Toast.LENGTH_SHORT).show();return super.onTouchEvent(event);}
}
动作监听
package com.example.yongliu.onthouchstudy;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private TextView mBtn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mBtn = findViewById(R.id.btn);mBtn.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View view, MotionEvent motionEvent) {switch (motionEvent.getAction()){case MotionEvent.ACTION_DOWN:Toast.makeText(MainActivity.this,"控件内部的触摸事件 ACTION_DOWN",Toast.LENGTH_SHORT).show();break;case MotionEvent.ACTION_UP:Toast.makeText(MainActivity.this,"控件内部的触摸事件 ACTION_UP",Toast.LENGTH_SHORT).show();break;}return true;}});}@Overridepublic boolean onTouchEvent(MotionEvent event) {Toast.makeText(MainActivity.this,"控件之外的触摸事件",Toast.LENGTH_SHORT).show();return super.onTouchEvent(event);}
}
分析
  • 如果setOnTouchListener中的onTouch方法返回值是true(事件被消费)时,则onTouchEvent方法将不会被执行;
    证明:onTouchListener的onTouch方法优先级比onTouchEvent高,会先触发 ~
  • 只有当setOnTouchListener中的onTouch方法返回值是false(事件未被消费,向下传递)时,onTouchEvent方法才被执行;
    证明:只有单事件未消费的情况下,才会去接着触发onTouchEvent,反之onTouchEvent方法不会被调用 ~
  • 内置诸如click事件的实现等等都基于onTouchEvent,假如onTouch返回true,则代表事件已消费,将不会再被触发
  • 以上说的情况适用于View对象(事件会最先被最内层的View对象先响应)而不是ViewGroup对象(事件会最先被最外层的View对象先响应)

Android进阶之路 - onTouch从简入繁相关推荐

  1. Android进阶之路 - 存、取、读 本地 Json 文件

    最近在开发中又开始加载一些本地的json数据源,回头看之前竟然没记录,赶紧记录一波 ~ 如何准备一个合格的json文件? AndoridStudio中如何存放json文件? 如何读取本地Json文件数 ...

  2. Android进阶之路 - 解决部分手机拍照之后图片被旋转的问题

    这几天犯了一个错误,初期想着甩锅给后台的- 但还好及时发现了是自身的问题~ 关联文章 Android基础进阶 - 调用拍照.获取图片(基础) Android基础进阶 - 获取.调用相册内图片(基础) ...

  3. Android进阶之路 - 批量下载、缓存图片、视频

    之前已经记录过,批量下载图片和缓存本地的方式,此篇主要记录批量下载图片.视频,同时缓存在本地的功能实现 关联篇 Android进阶之路 - 批量下载.缓存图片 Android进阶之路 - 批量下载.缓 ...

  4. Android进阶之路 - 软键盘中右下角的设置与监听

    在项目中,多多少少会遇到修改软键盘右下角按钮的需求,虽然已经写过几次,但是还是觉得在这里专心做个笔记比较放心 ~ 我的那些软键盘Blog ~ Android进阶之路 - 常见软键盘操作行为 Andro ...

  5. Android进阶之路 - 批量下载、缓存图片

    在日常项目开发中,关于图片批量下载,数据缓存的相关功能比比皆是,这次也是去年在项目中需要在本地缓存商品数据,所以用到了批量下载的功能,特此记录 ~ 关联篇 Android进阶之路 - 批量下载.缓存图 ...

  6. 浅谈Android进阶之路

    原址 过去十年是移动互联网蓬勃发展的黄金期,相信每个人也都享受到了移动互联网红利,在此期间,移动互联网经历了曙光期.成长期.成熟期.现在来说已经进入饱和期.依然记得在 2010-2013 年期间,从事 ...

  7. Android 进阶之路:ASM 修改字节码,这样学就对了!

    本文已授权个人公众号「鸿洋」原创发布. 恢复双休了,准备捡起来写博客这件事,会尝试写好每一篇博客,准备写一个「进阶之路」的系列,希望对你有用. 没错,看了很多 ASM 入门的文章,都感觉文章写的很轻松 ...

  8. Android 进阶之路(我的博客文章目录)

    原文地址:http://blog.csdn.net/u011240877 为了方便读者阅读以及自己回顾,总结写过的文章和一些想要写的文章目录如下: #1.Java Java 解惑:Comparable ...

  9. Android进阶之路 - 拉伸的弹簧效果

    因为在一些app中看到了图片的下拉放大,同时自带回弹的效果,所以在网上找了一个,同时尝试实现了一下,勉强满足基本需求,所以在此用于记录,可直接copy使用 - -~ 弹框效果 图片下拉回弹效果 上下拉 ...

最新文章

  1. python投资组合
  2. AI正在如何重塑生活和消费?头部企业齐聚,邀你共谈智能产业新机会
  3. ubuntu下使用apt安装mysql_Ubuntu下通过apt包管理安装mysql
  4. 关于机器学习 Machine Learning中loss函数参数正则化的一点思考
  5. 【amp;#9733;】Web精彩实战之amp;lt;智能迷宫amp;gt;
  6. 利用Docker快速部署Oracle环境
  7. activiti工作流 php,码云社 | 砺锋科技-SpringBoot整合Activiti工作流(附源码) - 用代码改变世界...
  8. C语言判断m数为素数,判断数m是否为素数 c语言求素数的代码
  9. C语言函数库之字符串连接函数(string.h)
  10. PreferenceActivity之 Subclasses of PreferenceActivity must override isValidFragment(String)
  11. 行人检测论文 -- ALFnet Learning Efficient Single-stage Pedestrian Detectors by Asymptotic Localization Fit
  12. 怎样将图片变成圆形?教你裁剪图片的方法
  13. php把图片处理成圆形透明的图片,做圆形透明头像【微信头像】
  14. 动力节点【CRM客户管理系统】笔记1.简介、技术架构、软件开发生命周期、CRM核心业务介绍
  15. frame切换、多窗口切换
  16. vue3 注册全局方法 定义全局方法
  17. Matlab画根轨迹
  18. 使用“soup.h1.text”爬虫提取标题会多一个\
  19. 如何PC机上搭建 中标麒麟系统+达梦数据库的开发环境
  20. php之box/spout 导入导出功能

热门文章

  1. UWB室内定位:TDOA定位方法的时间同步问题
  2. [Elasticsearch]cat API的使用
  3. c 工厂模式与mysql链接_工厂模式连接数据库
  4. 【转载】如何巧用IPD,建立完善的产品研发管理体系?
  5. (c语言) 计算油费
  6. 安卓生成keystore和查看keystore
  7. 刷脸支付不需要掏手机扫码很是方便
  8. 《象与骑象人》读后感_20170717
  9. oracle整库的移植,Oracle数据库整机移植技术(原创)
  10. GDCM:SCU验证的测试程序