`
119568242
  • 浏览: 430907 次
  • 性别: Icon_minigender_1
  • 来自: 深圳/湛江
社区版块
存档分类
最新评论

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菜鸟日记25-android反编译

    这篇“Android菜鸟日记25-android反编译”将带你走进Android反编译的世界,揭示APK背后的秘密。 首先,让我们了解什么是Android反编译。Android应用主要由Java语言编写,经过编译后生成Dalvik字节码(.dex文件),...

    私密日记本android小程序

    《构建私密日记本:Android小程序开发详解》 在当今数字化时代,个人隐私的保护越来越受到重视,而私密日记本作为一个记录内心世界的私密空间,其数字化形式——Android小程序,成为了许多用户的新选择。本文将详细...

    android商城源码(菜鸟商城)

    本源码包"cniao5-shop-master"是一个专门为Android平台设计的商城应用项目,名为“菜鸟商城”。这个源码库包含了完整的Android应用开发所需的所有组件和功能,对于开发者来说,无论是学习Android应用开发,还是进行...

    android逆向菜鸟速参手册完蛋版

    ### Android逆向工程基础知识 #### 一、环境的搭建 - **Eclipse搭建安卓开发环境**:使用Eclipse作为开发工具来搭建安卓开发环境是非常基础的步骤。这通常包括安装Eclipse IDE、Android SDK(软件开发包)、ADT...

    android app项目菜鸟微博

    【Android App项目:菜鸟微博详解】 在移动应用开发领域,Android平台因其开源性和广泛的设备覆盖范围,成为开发者的重要选择。本项目"菜鸟微博"是一个基于Android的社交媒体应用程序,旨在为初学者提供一个学习和...

    Android面试题从菜鸟到高手

    就业参考资料,Android面试题从菜鸟到高手,扩展就业面。值得看 就业参考资料,Android面试题从菜鸟到高手,扩展就业面。值得看就业参考资料,Android面试题从菜鸟到高手,扩展就业面。值得看就业参考资料,Android...

    android菜鸟练手小项目之自定义日历

    在这个名为"android菜鸟练手小项目之自定义日历"的项目中,我们将探索几个关键的技术点。 首先, LitePal数据库 是一个轻量级的ORM(对象关系映射)框架,适用于Android开发。它使得开发者可以更加便捷地操作SQLite...

    android逆向菜鸟速参手册骚动版.pdf

    Android 逆向菜鸟速参手册骚动版 本手册旨在为 Android 逆向初学者提供一份详细的指导手册,涵盖了 Android 逆向的基础知识和技术。 一、环境搭建 1. Eclipse 搭建 Android 开发环境 2. Eclipse 搭建 NDK 开发...

    Android课程设计-菜鸟裹裹app源代码+文档说明.zip

    Android课程设计-计菜鸟裹裹app源代码+文档说明菜鸟裹裹主要包括1.支付宝快速登录2.支付宝注册3.手机淘宝登录,手机登录4.首页-校园认证5.首页-包裹搜索,首页-添加包裹6.首页-扫一扫7.首页-身份码8.首页-寄万物,寄...

    菜鸟窝企业项目课程《菜鸟商城》的源码.rar

    《菜鸟商城》是一款基于Java和安卓技术的企业级电商项目,旨在提供一个全面的在线购物平台。这个项目不仅包含了后台管理系统,还涵盖了移动端的安卓应用,为用户和商家提供了丰富的功能。下面将详细介绍该项目中的...

    Android逆向菜鸟速参手册完蛋版_52pojie_Part2(END)

    Android逆向菜鸟速参手册完蛋版_52pojie.pdf 作者允许传播

    Java 菜鸟 成长日记

    本文将基于《Java 菜鸟 成长日记》中提到的知识点,详细阐述Java Web开发中关于Servlet的核心概念、生命周期、容器以及实例化和初始化的过程。 首先,Servlet是一种Java类,它继承自httpServlet类,用于在服务器端...

    Android逆向菜鸟速参手册完蛋版_52pojie_Part1

    Android逆向菜鸟速参手册完蛋版_52pojie.pdf 由于大于60MB所以分为2个压缩文件

    Android最新模拟器菜鸟速参手册加强版

    ### Android最新模拟器菜鸟速参手册加强版 #### 概述 本文档旨在为初学者提供一份详尽的指南,帮助他们快速掌握Android模拟器及其相关的ADB(Android Debug Bridge)命令。ADB是一款功能强大的工具,它能够帮助...

    菜鸟商城Android全套视屏教程

    # 菜鸟商城 # 是一个仿淘宝客户端的实战课程,功能包括:1.支付(支付宝,微信,百度钱包) 、首页 、热卖 、商品大全 、购物车 、我的 、商品列表 、商品详情 、注册/登录 、收货地址 、我的订单 、我的收藏 ..... ...

    Android菜鸟成长笔记(十三)——碎片(一)

    在Android应用开发中,"碎片"(Fragment)是Android 3.0(API级别11)引入的一个重要组件,用于创建动态和可重用的UI片段。本篇笔记将深入探讨碎片的概念、用途以及如何在实际项目中使用碎片。通过学习这篇笔记,你...

    个人日记本

    在“个人日记本”中,数据存储可能采用了常见的数据库技术,如SQLite,它是Android系统内置的轻量级数据库,适合小型应用的数据存储需求。SQLite支持SQL语言,用户可以通过创建表来保存日记条目,包括日期、标题、...

Global site tag (gtag.js) - Google Analytics