首页 文章 精选 留言 我的

精选列表

搜索[scroll],共606篇文章
优秀的个人博客,低调大师

Android: 触屏fling/scroll/drag的区别及其详细过程

对于一个view, 常用的操作有点击(click)和长按(long press)二种。实际上,这些操作类型是Android内部在onTouchEvent(MotionEvent event)里对用户的动作做了一定的分析,从而通知应用程序是发生了点击还是长按等事件。 有时,我们需要的并不仅限于这两种操作。我们可以借助GestureDetector来分析出更细致的操作类型。基本的过程就是创建一个myGestureDetector对象,传入自己定义的myOnGestureListener对象,在自己的onTouchEvent回调函数中将接收到的event传给myGestureDetector进行分析,myOnGestureListener会回调我们定义的动作。 【 从 GestureDetector.SimpleOnGestureListener派生出myListener 会更简单,因为这个类已经实现了全部接口,只是没有什么实际有用的功能。】 参考以下代码(for an Activity): // ------------------------------------------------------------------------------- private GestureDetector mGestureDetector; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mGestureDetector = new GestureDetector(this, new MyGestureListener()); } @Override public boolean onTouchEvent(MotionEvent event) { return mGestureDetector.onTouchEvent(event); } class MyGestureListener extends GestureDetector.OnGestureListener{ //共有6个方法: // 用户轻触触屏:Touch down(仅一次)时触发, e为down时的MotionEvent: boolean onDown(MotionEvent e){return true;} // 用户轻触触屏,且尚未松开或拖动: // 在Touch down(仅一次)之后一定时间(115ms)触发,e为down时的MotionEvent: void onShowPress(MotionEvent e){return true;} // 用户(轻触触屏后)松开:Touch up(仅一次)时触发,e为up时的MotionEvent: boolean onSingleTapUp(MotionEvent e){return true;} // 用户轻触触屏,并拖动: // 按下并滑动时触发,e1为down(仅一次)时的MotionEvent,e2为move(多个)时的MotionEvent: boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY){return true;} // 用户长按触屏(此View必须是可长按的: myView->setLongClickable(true);): // 在Touch down之后一定时间(500ms)后,由多个down事件触发,e为down时的MotionEvent: void onLongPress(MotionEvent e){return true;} // 用户按下触屏、快速移动后松开: //按下并快速滑动一小段距离(多个move),up时触发,e1为down(仅一次)时的MotionEvent, // e2为up(仅一次)时的MotionEvent: boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){return true;} }// ------------------------------------------------------------------------------- 至于doubletap的检测,可以通过设置mGestureDetector的OnDoubleTapListener来实现: GestureDetector.OnDoubleTapListener doubleTapListener = new GestureDetector.OnDoubleTapListener() { // 完成一次单击,并确定(300ms内)没有发生第二次单击事件后触发,e为down时的MotionEvent: boolean onSingleTapConfirmed(MotionEvent e){return true;} // 第二次单击down时触发,e为第一次down时的MotionEvent: boolean onDoubleTap(MotionEvent e){return true;} // 第二次单击down、move和up时都触发,e为不同时机下的MotionEvent: boolean onDoubleTapEvent(MotionEvent e){return true;} } mGestureDetector.setDoubleTapListener(doubleTapListener);// ------------------------------------------------------------------------------- 具体地说,典型的触屏事件及其listener执行的流程见下:1). 单击事件的执行流程: 有两种情况,一种是时间很短,一种时间稍长。 时间很短:onDown ----> onSingleTapUp----> onSingleTapConfirmed 时间稍长:onDown ----> onShowPress ----> onSingleTapUp----> onSingleTapConfirmed 2). 长按事件 onDown ----> onShowPress ----> onLongPress 3.抛(fling):手指触动屏幕后,稍微滑动后立即松开: onDown----> onScroll----> onScroll----> onScroll----> ………----> onFling 4.拖动(drag) onDown----> onScroll----> onScroll----> onFiling 注意:有的时候会触发onFiling,但是有的时候不会触发,z这是因为人的动作不标准所致。 本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/p/6105922.html,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册