Android开发之手势检测及通过手势实现翻页功能的方法
本文实例讲述了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程序设计有所帮助。
- XCode读取Excel数据(适用于任何数据库)
- ObjectDataSource选择业务对象列表为空的探讨
- ASP.NET Web API自身对CORS的支持: CORS授权检验的实施
- 模版引擎XTemplate与代码生成器XCoder(源码)
- 深度学习让人脸识别准确率不断提升
- 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用
- 小论线性变换
- 谈谈基于OAuth 2.0的第三方认证 [下篇]
- Razor Engine,实现代码生成器的又一件利器
- 谈谈基于OAuth 2.0的第三方认证 [上篇]
- 我所理解的RESTful Web API [Web标准篇]
- ASP.NET Web API中的Controller
- iOS 转场动画探究(二)
- Swift 面向对象解析(二)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Laravel路由研究之domain解决多域名问题的方法示例
- python GUI模拟实现计算器
- 详解php命令注入攻击
- PHP设计模式之策略模式原理与用法实例分析
- python使用QQ邮箱实现自动发送邮件
- php使用lua+redis实现限流,计数器模式,令牌桶模式
- PHP whois查询类定义与用法示例
- Laravel多域名下字段验证的方法
- ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
- 简单了解如何封装自己的Python包
- python求解汉诺塔游戏
- Python第三方包PrettyTable安装及用法解析
- 如何让python的运行速度得到提升
- 在keras中对单一输入图像进行预测并返回预测结果操作
- python中数字是否为可变类型