热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android开发之手势检测及通过手势实现翻页功能的方法

这篇文章主要介绍了Android开发之手势检测及通过手势实现翻页功能的方法,结合实例形式分析了AndroidGestureDetector类实现手势检测功能的相关操作技巧,需要的朋友可以参考下

本文实例讲述了Android开发之手势检测及通过手势实现翻页功能的方法。分享给大家供大家参考,具体如下:

手势是指用户手指或触摸笔在触摸屏上的连续触碰的行为,比如在屏幕上从左至右划出的一个动作,就是手势,再比如在屏幕上画出一个圆圈也是手势。手势这种连续的触碰会形成某个方向上的移动趋势,也会形成一个不规则的几何图形。Android对两种手势行为都提供了支持:

1. 对于第一种手势行为而言,Android提供了手势检测,并为手势检测提供了相应的监听器。

2. 对于第二种手势行为,Android允许开发者添加手势,并提供了相应的API识别用户的手势。

手势检测

Android 为手势检测提供了一个GestureDetector类,GestrueDetector实例代表了一个手势检测器,创建GestureDetector时需要传入一个GestureDetector.OnGestrureListener实例,GestureDetector.OnGestrueListener就是一个监听器,负责对用户的手势行为提供响应。

GestrueDetector.OnGestureListener里包含的事件处理方法如下。

Boolean onDown(MotionEvent e):当触碰事件按下时触发该方法。
Boolean onFling(MotionEvent e1,MotionEvent e2,float velocitX,floatvelocity):当用户在触屏上拖过是触发该方法。其中velocityX,velocityY代表拖过动作在横向,纵向上的速度。
Abstract void onLongPress(MotionEvent e):当用户在屏幕上长按时触发该方法。
Boolean onScroll(MotionEvent e1,MotionEvent e2,float distance,float distance):当用户在屏幕上滚动式触发该方法。
Void onShowPress(MotionEvent e):当用户在触摸屏上按下,而且还未移动和松开时触发该方法。
Boolean onSingleTapUp(MotionEvent e):用户在触摸屏上的轻击事件将会触发该方法。

使用Android的手势检测只需要两个步骤:

1. 创建一个GestureDetector.创建该对象时必须实现一个GestureDetector.OnGestureListener监听器实例。

2. 为应用程序的Activity的TouchEvent事件绑定监听器,在事件处理中指定把Activity上的TouchEvent事件交给GestureDetector处理。

经过上面的两个步骤之后,Activity上的TouchEvent事件就会交给GestureDetector处理,而GestureDetector就会检测是否触发了特定的手势动作。

实例:通过手势实现翻页效果

思路:把Activity的TouchEvent交给GestureDetector处理.这个程序的特殊之处在于,该程序使用了一个ViewFlipper组件,ViewFlipper组件其实是一个容器类组件,因此可调用addView(View v)添加多个组件,一旦向ViewFlipper中添加了多个组件之后,ViewFlipper可使用动画控制多个组件之间的切换效果。

本实例通过GestureDetector来检测用户的手势动作,并根据手势动作来控制ViewFlipper包含的View组件的切换,从而实现翻页效果。

关键代码如下:

Public Boolean onFling(MotionEvent event1,MotionEvent event2,float velocityX,velocity)
{
  if(event1.getX()-event2.getX()>FLIP_DISTANCE)
  {
    flipper.setInAnimation(animations[0]);
    flipper.setOutAnimation(animations[1]);
    flipper.showPrevious();
    return true;
  }
  else if(event2.getX()-event1.getX()>FLIP_DISTANCE)
  {
    flipper.setInAnimation(animations[2]);
    flipper.setOutAnimation(animation[3]);
    flipper.showNext();
    return true;
  }
  return false;
}

其中:

animations[0]=AnimaionUtils.loadAnimation(this,R.anim.left_in);
animations[1]=AnimaionUtils.loadAnimation(this,R.anim.left_out);
animations[2]=AnimaionUtils.loadAnimation(this,R.anim.right_in);
animations[3]=AnimaionUtils.loadAnimation(this,R.anim.right_out);

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android手势操作技巧汇总》、《Android基本组件用法总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。


推荐阅读
  • 微信小程序详解:概念、功能与优势
    微信公众平台近期向200位开发者发送了小程序的内测邀请。许多人对微信小程序的概念还不是很清楚。本文将详细介绍微信小程序的定义、功能及其独特优势。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • 本文介绍了 Python 中的基本数据类型,包括不可变数据类型(数字、字符串、元组)和可变数据类型(列表、字典、集合),并详细解释了每种数据类型的使用方法和常见操作。 ... [详细]
  • 通过马老师的视频学习了Java中的容器相关内容,包括Collection、Set、List、Map及其常见实现类,并深入了解了这些容器的基本操作方法。 ... [详细]
  • 直播带货系统中的推流技术详解
    本文介绍了RTMP(实时消息传输协议)及其在直播带货系统中的应用,并详细探讨了带货直播系统的连麦方案,包括服务端合流和客户端合流的优势与劣势。 ... [详细]
  • CSS 百分比单位的取值依据是什么
    本文详细探讨了 CSS 中百分比单位的取值依据,包括不同定位方式下的包含块概念及其应用。通过具体的示例和代码,帮助读者更好地理解和掌握这一知识点。 ... [详细]
  • Docker 环境下 MySQL 双主同步配置指南
    本文介绍了如何在 Docker 环境中配置 MySQL 的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。 ... [详细]
  • 微服务优雅上下线的最佳实践
    本文介绍了微服务上下线的正确姿势,避免使用 kill -9 等粗暴手段,确保服务的稳定性和可靠性。 ... [详细]
  • 在 CentOS 7 环境中使用 MySQL 5.6 镜像启动数据库时遇到权限问题,本文将详细探讨并提供解决方案。 ... [详细]
  • 本文介绍了Spring 2.0引入的TaskExecutor接口及其多种实现,包括同步和异步执行任务的方式。文章详细解释了如何在Spring应用中配置和使用这些线程池实现,以提高应用的性能和可管理性。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • ECharts 官方提供了丰富的图表示例,但实际项目中往往需要从后端动态获取数据。本文将详细介绍如何从后端获取数据并将其转换为 ECharts 所需的 JSON 格式,以实现动态饼图的展示。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 前言Spring中一个Bean的创建过程是十分复杂的,这里通过源码来简单分析一下。原理分析相关类图如下DefaultListableBeanFactory就是IOC容器的最终实现, ... [详细]
author-avatar
魔蝎陈小琳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有