Android进阶之路 - onTouch从简入繁
文章不完善,完善之后会移除此处提示!!!
惭愧惭愧,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从简入繁相关推荐
- Android进阶之路 - 存、取、读 本地 Json 文件
最近在开发中又开始加载一些本地的json数据源,回头看之前竟然没记录,赶紧记录一波 ~ 如何准备一个合格的json文件? AndoridStudio中如何存放json文件? 如何读取本地Json文件数 ...
- Android进阶之路 - 解决部分手机拍照之后图片被旋转的问题
这几天犯了一个错误,初期想着甩锅给后台的- 但还好及时发现了是自身的问题~ 关联文章 Android基础进阶 - 调用拍照.获取图片(基础) Android基础进阶 - 获取.调用相册内图片(基础) ...
- Android进阶之路 - 批量下载、缓存图片、视频
之前已经记录过,批量下载图片和缓存本地的方式,此篇主要记录批量下载图片.视频,同时缓存在本地的功能实现 关联篇 Android进阶之路 - 批量下载.缓存图片 Android进阶之路 - 批量下载.缓 ...
- Android进阶之路 - 软键盘中右下角的设置与监听
在项目中,多多少少会遇到修改软键盘右下角按钮的需求,虽然已经写过几次,但是还是觉得在这里专心做个笔记比较放心 ~ 我的那些软键盘Blog ~ Android进阶之路 - 常见软键盘操作行为 Andro ...
- Android进阶之路 - 批量下载、缓存图片
在日常项目开发中,关于图片批量下载,数据缓存的相关功能比比皆是,这次也是去年在项目中需要在本地缓存商品数据,所以用到了批量下载的功能,特此记录 ~ 关联篇 Android进阶之路 - 批量下载.缓存图 ...
- 浅谈Android进阶之路
原址 过去十年是移动互联网蓬勃发展的黄金期,相信每个人也都享受到了移动互联网红利,在此期间,移动互联网经历了曙光期.成长期.成熟期.现在来说已经进入饱和期.依然记得在 2010-2013 年期间,从事 ...
- Android 进阶之路:ASM 修改字节码,这样学就对了!
本文已授权个人公众号「鸿洋」原创发布. 恢复双休了,准备捡起来写博客这件事,会尝试写好每一篇博客,准备写一个「进阶之路」的系列,希望对你有用. 没错,看了很多 ASM 入门的文章,都感觉文章写的很轻松 ...
- Android 进阶之路(我的博客文章目录)
原文地址:http://blog.csdn.net/u011240877 为了方便读者阅读以及自己回顾,总结写过的文章和一些想要写的文章目录如下: #1.Java Java 解惑:Comparable ...
- Android进阶之路 - 拉伸的弹簧效果
因为在一些app中看到了图片的下拉放大,同时自带回弹的效果,所以在网上找了一个,同时尝试实现了一下,勉强满足基本需求,所以在此用于记录,可直接copy使用 - -~ 弹框效果 图片下拉回弹效果 上下拉 ...
最新文章
- python投资组合
- AI正在如何重塑生活和消费?头部企业齐聚,邀你共谈智能产业新机会
- ubuntu下使用apt安装mysql_Ubuntu下通过apt包管理安装mysql
- 关于机器学习 Machine Learning中loss函数参数正则化的一点思考
- 【amp;#9733;】Web精彩实战之amp;lt;智能迷宫amp;gt;
- 利用Docker快速部署Oracle环境
- activiti工作流 php,码云社 | 砺锋科技-SpringBoot整合Activiti工作流(附源码) - 用代码改变世界...
- C语言判断m数为素数,判断数m是否为素数 c语言求素数的代码
- C语言函数库之字符串连接函数(string.h)
- PreferenceActivity之 Subclasses of PreferenceActivity must override isValidFragment(String)
- 行人检测论文 -- ALFnet Learning Efficient Single-stage Pedestrian Detectors by Asymptotic Localization Fit
- 怎样将图片变成圆形?教你裁剪图片的方法
- php把图片处理成圆形透明的图片,做圆形透明头像【微信头像】
- 动力节点【CRM客户管理系统】笔记1.简介、技术架构、软件开发生命周期、CRM核心业务介绍
- frame切换、多窗口切换
- vue3 注册全局方法 定义全局方法
- Matlab画根轨迹
- 使用“soup.h1.text”爬虫提取标题会多一个\
- 如何PC机上搭建 中标麒麟系统+达梦数据库的开发环境
- php之box/spout 导入导出功能