Android菜鸟日记13 触控

Android菜鸟日记13
触控

Ontouch:
简介:
Ontouch(Event) 是在activiy中给UI的触摸事件监听器的调用函数[按下、移动、松开等]
返回值为boolean 返回值决定是否使用此事件
细节:
UI.setOnTouchListener(监听器)
Ontouch函数 是触摸事件监听器的回调函数。
当被绑定的UI发生了触摸事件,则调用监听器的Ontouch()

ontouchEvent():
简介:
ontouchEvent(Event),是具体UI类中编写的触摸事件监听器。
返回值为boolean返回值决定是否使用此事件
细节:
当activity中的UI被点击后 先调用Ontouch(),如果Ontouch()返回false则执行被触摸的UI的ontouchEvent()。

1.activity是先进入Ontouch如果返回false,ontouchEvent才执行.
如果ontouchEvent也返回false则此UI对此事件[Event]不使用。
此时android会不断地在当前activity中另一UI对象来处理此[event]事件。

PS:比如一个按钮 如果我们不使用他的点击event,则按钮会被按下去后不弹出
因为,我们使用点击event,则在我们手指抬起时,android会发出一个抬起event,
而我们不适用点击event,则我们手指抬起时,android不会发出抬起event,则按钮无法抬起。


PS2:关于为什么按钮不变化
系统内置的UI的变化都是在ontouchEvent()执行的,如果在activty中的Ontouch()返回了true,则就不执行ontouchEvent()了 系统内置的UI就无法显示系统的按钮效果了(button的点击效果之类的)
所以要让系统的内置UI显示他的按钮效果,则需要在Ontouch()返回true前,调用ontouchEvent(Event)。

Ps3:
如果按钮出现双false,Android每次仅停止一个触摸序列事件发送到按钮。
对于新的触摸序列事件 将会重新发送会按钮。
也就是说,出现双false[ontouch(),ontouchEvent()]时 停止的只是当前的触摸事件队列发送到按钮,新的触摸事件队列到来时则还会发送到刚才被停止的按钮。


多点触控:
多点触控的时候
也是写在ontouch 或ontouchEvent
通过event.getPointerId() 获得几点触摸。
event.getX(ptridX) // ptridX 第几个触摸点 从0开始 获得此点的X
event.getX(ptridX)// 获得此点的Y
event.getXXXXX(大多都是传入引索号的)

注意:
手指(触摸)引索:当前手指是第几个触摸的手指,如果前面的手指离开了引索会减少。[比如 原本是1 但是前面的0走了 ,1就变成了0]
手指(触摸)ID:当手指触摸后就会分配给他ID,手指离开不会对其他手指ID影响,但是新进入的手指ID会从0开始找到一个没有使用的id(比如ID 0 ,1 如果0 走了 1不变,但是新进入的并不是2,而是重新使用0)
总结一下:
引索至于当前手指触摸的顺序有关。
而ID是已进入即不可改变,且数字不留空。后面进来的会补充空缺的。


一、在多点触摸时,第二个手指先离开。
1:当点下第一个点时 action应该是0,此时还是认为是单点触摸。
此时此手指引索为0,ID为0;
2:当殿下第二个点时:action应该是261。第二个手指的引索为:1 ID:1
多点触摸的action(简单的说就是id*256+多点action[多点时5 down 6 up 2 move 单点时0 down 1up 2 move ] 261其实是16进制数0x00000105 第三位表示id 第一位表示action[多点时5 down 6 up 2 move 单点时0 down 1up 2 move ])此时已经被认为是多点触摸了。
3 : 当松开第二个手指时,action应该为:262,(256+6):
此时认为是多点触摸离开一个手指。
4:再松开第一个手指时,action应该为:1
此时只有一个手指在屏幕上,所以认为是单点触摸。

二、第一个手指先离开
1,2相同
3,当松开第一个手指时:action应该为:6(0*256+6)
此时认为是多点触摸。ID为0的手指离开。第二个手指的引索变为0,id还是1.
4: 当第二个手指 离开时,action为:1
此时如果按照前面的理论应该输出262(1*256+6) 但是android认为最后一个来开的手指触发的action必为1。

三、第一个手指先离开再按回来。
1,2相同
3,当松开第一个手指时:action应该为:6(0*256+6)
此时认为是多点触摸。ID为0的手指离开。第二个手指的引索变为0,id还是1.
4,当点回第一个手指时:aciton应该为:6
此时认为是多点触摸。ID为0的手指进入,引索为1。[此时第二个手指id为1,引索为0]
[新进入的手指会从0开始找ID如果 空缺就是用 而引索只是触摸的时间上的先后顺序来决定的]
5,当第二个手指离开时:action应该为:262(256+6)
如一的3~4

掩码
Android提供了 掩码可以让我们方便的找到id 动作action等
Int action=Event.getAction
ptrID=(action&ACTION_POINTER_ID_MASK)>>> ACTION_POINTER_ID_SHITF //获得ID
0x0000ff00 0x00000008
action=action&ACTION_MASK //获得动作id
0x000000ff
If(action<7&&action>4)
{
Action=action-5; //把多点触摸动作action转为单点action
}
说明:
Action的构成是0x0000xxyy(xx为2位id) (yy为2位动作)。
要获得id时只需要&上一个只保留xx的数,然后向右移位8位。[移位是考虑2进制而这里是16进制的数字所以是8而不是2位]
0x0000ff00 之所是2个ff是因为移位和并(&)都是考虑2进制的ff那两位是要的所以要让那两位转成2进制后都是1,16制FF转成2进制是11111111;
而16进制向右移动2位,就是16*16=256[10进制]
就是8位2进制。所以>>>一个0x00000008
而要获得动作action则只需要最后2位所以&一个0x000000ff即可。
此时获得的可能是多点或者单点,再加个一个条件判断,统一让其变为单点的。
好判断此触摸ID的动作。


总结:
1.引索至于当前手指触摸的顺序有关。
2.而ID是已进入即不可改变,且数字不留空。后面进来的会补充空缺的。
3.action为id*256+动作ACTION
【动作ACTION:多点时5 down 6 up 2 move 单点时0 down 1up 2 move】
4.最后离开的手指触发的action必为1,与他的id号无关。
5. event.getXXXXX(大多都是传入引索号的)
6.通过掩码我们可以快速的获得出入的事件的手指(触摸)ID ,和动作。
ptrID=(action&ACTION_POINTER_ID_MASK)>>> ACTION_POINTER_ID_SHITF //获得ID
action=action&ACTION_MASK //获得动作id


2011-9-11
poolo
Android性能优化】Android内存度量体系:PSS、RSS、USS 与 dumpsys meminfo 的源码级解析 本文基于 AOSP Android 16 源码,以 `Debug.MemoryInfo` 为切入点,系统拆解 Android 内存度量的完整口径体系。文中讲清 dalvik / native / other 三大分类的来源,逐条解析 PSS、SwappablePss、RSS、Private Dirty、Shared Dirty、Private Clean、Shared Clean、SwappedOut、SwappedOutPss 这九个维度的含义与差异,并深入 `other` 分类下 `.so`。 阅读详情

相关推荐

Android 摸事件

摸事件分为: 单点摸和多点摸 一:单点摸 1. 怎么知道是单点摸还是多点摸?    onTouchEvent()方法和onTouch()方法都可以,都可以通过.getAction()返回的是的所有信息。    区别:onTouchEvent()是Activity的,onTouch()是View的。    public boolean onTouchEven

2896405089的博客 575

Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!

Android实训案例(三)——实现时间轴效果的ListView,加入本地存储!>感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲的是时间轴的实现,说实话,其实就是listview的偷梁换柱,本来我会在写listview这个系列的时候写的,但是最近自己写的一个项目《Only》上用到了,很多群友说也想看看怎么实现的,独乐乐不如众乐乐,所以就提前先来分享

刘桂林的博客 4615

Android菜鸟日记20 - ListView

Android菜鸟日记 20 ListView ListView之前已经在布局那篇写过了 后来发现这个系统自带的功能还是比较多的 很多东西完全不用自己来弄。 首先是上次写的 10.ListView 列表件 [重点且相对复杂] 作用:列表显示信息内容 解释: 封装listView到activity的ListACtivity Listview中的每行信息都是一个...

ipoolo的专栏 149

Android菜鸟日记 23获取数据方式- sql,Sdcard,assets,preferences

Android菜鸟日记 23获取数据方式- sql,Sdcard,assets,preferences Sql 在android中 sqlltie适用于大量存储数据的。 至少我是这么认为。 主要: 是 SQLhelper 来作为助手 在继承sqlhelper的类中的oncreate 创建数据库。 然后通过SQLhelper的对象得到具体数据库 SQLhelper对象.ge...

ipoolo的专栏 92

Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!...

Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果! 感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲的是时间轴的实现,说实话,其实就是listview的偷梁换柱,本来我会在写listview这个系列的时候写的,但是最近自己写的一...

weixin_33831673的博客 211

细谈软件支付功能的实现----菜鸟日记

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33968104的博客 1198

android layout textview里图片大小_Android之ListView实现本地存储,实现恋爱日记的效果...

感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲的是时间轴的实现,说实话,其实就是listview的偷梁换柱,本来我会在写listview这个系列的时候写的,但是最近自己写的一个项目《Only》上用到了,很多群友说也想看看怎么实现的,独乐乐不如众乐乐,所以就提前先来分享,说说listview,这可是一个名角,在android上很受欢迎,也很实用,当...

weixin_31710835的博客 92

combobox 怎么实现对listview的类别查询_Android之ListView实现本地存储,实现恋爱日记的效果...

感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲的是时间轴的实现,说实话,其实就是listview的偷梁换柱,本来我会在写listview这个系列的时候写的,但是最近自己写的一个项目《Only》上用到了,很多群友说也想看看怎么实现的,独乐乐不如众乐乐,所以就提前先来分享,说说listview,这可是一个名角,在android上很受欢迎,也很实用,当...

weixin_39905037的博客 146

类程序Log4j Android

首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责 介绍日记工具类Log4j 在Android中的使用 首先须要下载Log4j:http://logging.apache.org/log4j/2.x/ 以及Log4j for android: https://code.google.com/p/android-loggi...

weixin_30685029的博客 64

菜鸡前端面试题整理日记

一直以来都有写点什么东西的想法,但又整天犹犹豫豫的,一会觉得准备不够充分,写的内容没什么质量,一会又觉得没什么内容可写的,以至于一拖再拖。万事开头难,难着难着就没有下面了,以此先开个头,记录自己的成长历程也是不错的,或许顺便还能帮上一些人呢。 分享个刚踏出校门的菜鸟所整理的前端面试题,当初被问到一时答不出来的问题,不会很详细和深入,对面试还是有点用的,仅供参考。 索引 1.事件冒泡、事...

dejk28162的博客 258

阿里 面试题我的科研网站大全,2024最新阿里Python高级面试题总结

大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**

2401_83620959的博客 586

大学借书记录

今天看了看我大学的借书记录。也从侧面显示出了我大学都在学什么东西。看我大一时期还有心思看一看闲书。大二期末因为参加数学建模借了很多神经网络的书。大三考研没怎么借书。大四阅读的书就有点和专业贴边了。看了我有的书名,唯一贯穿借书记录的就是有关于ACM和算法的书,每年都会有,奈何我的算法长进却是很小。在此把这个书单分析出来,共勉。ps 所有的东西都是倒序排列的(最后借的书序号为1)。后面的时间就是我借书

bleuesprit的专栏 2023

从 WAIC 2026 打开人工智能:一部正在发生的科技史诗

2026年7月17日到20日,上海世博展览馆。1100多家企业、3000多项展品、300多款全球首发——第九届世界人工智能大会(WAIC 2026)又一次把全球AI圈的目光拉到了黄浦江畔。但这次不一样:机器人不再只是在玻璃柜里挥挥手,而是真的在展馆里走楼梯、搬箱子、给你倒咖啡。AI也不再只是聊天机器人,而是能自己规划任务、调用工具、给你交活的"数字员工"。本文以WAIC 2026为窗口,倒带70年,聊聊AI是怎么从一群人的异想天开,变成改变世界的力量的。

weixin_72753562的博客 308

Android 开发中,requestWindowFeature(Window.FEATURE_NO_TITLE); 对于隐藏默认的紫色的标题栏失效

Android 开发中,requestWindowFeature(Window.FEATURE_NO_TITLE); 对于隐藏默认的紫色的标题栏失效

weixin_52173250的博客 83

Flutter 三方库 social_share 的鸿蒙适配教程

回顾整条适配链路:上游仓库同步进 AtomGit 保住历史;单包插件结构让适配落点收敛在插件根目录的ohos/目录,一条命令生成 ArkTS 骨架;Dart 侧只给 shareSms 加了 ohos 平台分支,ArkTS 侧用 systemShare、pasteboard、want、openLink 四类系统能力复刻十个接口,canOpenLink 门禁与 replyOnce 互斥处理平台差异;四份说明文件交代清楚适配行为与遗留差异,分支与 TAG 按社区规范提交发布。

漫步云端 196

Android Compose 开发,使用 ConstraintLayout,但是引入的是旧的 ConstraintLayout

Android Compose 开发,使用 ConstraintLayout,但是引入的是旧的 ConstraintLayout

weixin_52173250的博客 66

SwiftUIUIKit 怎么选?两代 UI 框架的适用范围

SwiftUIUIKit 怎么选?不是"谁取代谁",是两代技术并存各有边界。本质差异在范式:UIKit 命令式手动管理、十年存量与第三方生态;SwiftUI 声明式状态驱动、苹果逐年加码但仍有短板。选型配比:新项目默认 SwiftUI(新 API 优先)、存量 UIKit 项目用 UIHostingController 渐进迁移、超长列表与复杂集合视图等性能场景 UIKit 兜底、watchOS/visionOS 优先 SwiftUI。附速查表与警示:别信"全面取代"论,判断看项目清单不看论坛风向。

2501_91590906的博客 217
上一篇: Android菜鸟日记12 Gallery
下一篇: Android菜鸟日记14-对话框
iPoolo
博客等级 码龄17年 2粉丝 168原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值