手势交互之GestureDetector
GsetureDetector
一.交互过程
- 触屏的一刹那,触发MotionEvent事件
- 被OnTouchListener监听,在onTouch()中获得MotionEvent对象
- GestureDetector转发MotionEvent对象到OnGestureListener
- OnGestureListener获得该对象,根据该对象封装的信息做出合适的反馈
二.内部类:
1.OnGestureListener:单击类
方法
- 单击onDown(MotionEvent e)
- 抬起onSingleTapUp(MotionEvent e)
- 短按onShowPress(MotionEvent e)
- 长按onLongPress(MotionEvent e)
- 滚动onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY)
- 滑动onFling(MotionEvent e1,MotionEvent e2,float velocityX,float velocityY)
2.OnDoubleTapListener:双击
方法
- 双击OnDoubleTap(MotionEvent e)
- 双击按下和抬起各触发一次:onDoubleTapEvent(MotionEvent e)?应用例子?
- 单击确定onSingleTapConfirmed(MotionEvent e)?
3.SimpleOnGestureListener
概述: SimpleOnGestureListener实现了上面的连个接口 OnGestureListener and OnDoubleTapListener,可以通过继承这个类来实现你所想实现的手势交互动作。需要的动作可以在接口里找对应的方法,如果方法返回false就是什么都不做。
三.运用例子
效果
这个例子在主界面加载一个图片,然后左右滑动提示相应的文字。
过程
- OnTouchListener监听,在onTouch中获得MotionEvent对象
img.setOnTouchListener(new OnTouchListener() {
@Override//捕获的触摸屏发生的event事件
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return true;//记得这里改为ture
}
});
- 在Activity建立一个继承于SimpleOnGestureListener的内部类
class MyGestureListener extends SimpleOnGestureListener{
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
//e1和e2分别是开始和结束的动作对象
//通过e1和e2位置的比较判断手势的动作
if (e1.getX() - e2.getX() > 50) {
Toast.makeText(MainActivity.this, "从右向左滑动",0).show();
}else if(e2.getX() - e1.getX() >50){
Toast.makeText(MainActivity.this, "从左向右滑动",0).show();
}
return super.onFling(e1, e2, velocityX, velocityY);
}
}
3.在onCreate方法中获得一个GestureDetextor对象(声明省略了)
gestureDetector = new GestureDetector(MainActivity.this, new MyGestureListener());
4.在onTouch方法中gestureDetector转发MotionEvent对象到OnGestureListener(这里是MyGestureListener)
gestureDetector.onTouchEvent(event);
5.MyGestureListener获得该对象,根据该对象封装的信息做出合适的反馈(在图片上左右滑动提示对应的文字)
完整代码
public class MainActivity extends Activity {
ImageView img;
GestureDetector gestureDetector;
//3.这就是继承于一个SimpleOnGestureListener来利用对应的方法
//这里演示了一个滑动的手势效果
class MyGestureListener extends SimpleOnGestureListener{
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
//e1和e2分别是开始和结束的动作对象
//通过e1和e2位置的比较判断手势的动作
if (e1.getX() - e2.getX() > 50) {
Toast.makeText(MainActivity.this, "从右向左滑动",0).show();
}else if(e2.getX() - e1.getX() >50){
Toast.makeText(MainActivity.this, "从左向右滑动",0).show();
}
return super.onFling(e1, e2, velocityX, velocityY);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img = (ImageView) findViewById(R.id.img);
//4.获得gestureDetector对象
gestureDetector = new GestureDetector(MainActivity.this, new MyGestureListener());
//1.交互过程第一部是用户点击触发了MotionEvent时间
//2.下面是第二步,OnTouchListener监听,在onTouch中获得MotionEvent对象
img.setOnTouchListener(new OnTouchListener() {
@Override//捕获的触摸屏发生的event事件
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
//5.gestureDetector转发MotionEvent对象到OnGestureListener(这里是MyGestureListener)
gestureDetector.onTouchEvent(event);
//这里要改为true
return true;
}
});
}
}
手势交互之GestureDetector的更多相关文章
- 基于meanshift的手势跟踪与电脑鼠标控制(手势交互系统)
基于meanshift的手势跟踪与电脑鼠标控制(手势交互系统) zouxy09@qq.com http://blog.csdn.net/zouxy09 一年多前开始接触计算机视觉这个领域的时候,年幼无 ...
- 手势监听GestureDetector 案例
以下只做长按和甩出(用户按下朝某一方向甩动手指)案例 OnGestureListener可以查看到更多的手势事件 案例 package com.qf.mobliesafe.activity; impo ...
- 【手势交互】4. Kinect for XBox
"You are the Controller",Kinect for Xbox的广告词.明白说明了Kinect体感的交互方式.作为一款集成了诸多先进视觉技术的自然交互设备,Kin ...
- 【手势交互】8. Nimble Sense
早在2012.2013年度,手势识别领域就发生了几起重要的行业并购.比方英特尔对Omek的收购,谷歌对Flutter的收购.而苹果公司更是以3.45亿美金得高价收购了之前为微软Kinect提供技术支持 ...
- iOS查看3D效果的手势交互
公司项目中用到的,仿的人家厂子的效果,看起来还是挺高大上的,其实实现起来很简单,是一种伪3D;用手势滑动查看一个商品的3D展示. 在手机上手指左右滑动可以360°无死角查看这个商品,有兴趣的可以下de ...
- 手势交互之GestureOverlayView
一种用于手势输入的透明覆盖层,可以覆盖在其他空间的上方,也可包含在其他控件 android.gesture.GestureOverlayView 获得手势文件 需要用GesturesBuilder,如 ...
- 【手势交互】6. 微动VID
中国 天津 http://www.sharpnow.com/ 微动VID是天津锋时互动科技有限公司开发的中国Leap Motion. 它能够识别并跟踪用户手部的姿态.包含:指尖和掌心的三维空间位置:手 ...
- 【手势交互】9. PS Move
索尼研发体感控制技术已有10年,在过去那么多年里.尝试了3D摄像头.超声波和电磁感应等各种技术.最后还是觉得眼下的MOVE所使用的技术最为合适.PS Move是索尼于2010年9月份推出.用来让PS3 ...
- iOS7自定义back按钮和pop交互手势
Clambake for iPhone有一个回退按钮在所有的导航条上.这是一个简单的没有文字箭头. 实现一个自定义按钮是简单的.类似这个设置controller 的navigationItem一个le ...
随机推荐
- xcode5时代如何设置Architectures和Valid Architectures
目前ios的指令集有以下几种: 1,armv6,支持的机器iPhone,iPhone2,iPhone3G及对应的iTouch 2,armv7,支持的机器iPhone4,iPhone4S 3,armv7 ...
- Servlet 中使用POI生成Excel
使用的是poi3.13 http://mvnrepository.com/artifact/org.apache.poi/poi/3.13 import java.io.IOException; im ...
- 安卓天天练练(三)常用组件Toast
要写几句java package com.narumi.android_7_2; import android.app.Activity; import android.os.Bundle; impo ...
- Java 8:如何使用流方式查询数据库?
Speedment 是使用 ORM 方式操作数据库的一种选择,以前我们需要100行操作数据库的 Java 代码,在 Java 8中,可能只需要一行代码. 在90年代末,我使用 Java 开发数据库应用 ...
- Java接口修饰符详解
接口就是提供一种统一的”协议”,而接口中的属性也属于“协议”中的成员.它们是公共的,静态的,最终的常量.相当于全局常量.抽象类是不“完全”的类,相当于是接口和具体类的一个中间层.即满足接口的抽象,也满 ...
- RedHat Enterprise Linux 6.4-x86_64 md5:467B53791903F9A0C477CBB1B24FFD1F
RedHat Enterprise Linux 6.4-x86_64 md5:467B53791903F9A0C477CBB1B24FFD1F 这是下载地址:http://pan.baidu.com/ ...
- 实现对properties文件的有序读写
最近遇到一项需求,要求把properties文件中的内容读取出来供用户修改,修改完后需要再重新保存到properties文件中.很简单的需求吧,可问题是Properties是继承自HashTable的 ...
- 【HDOJ】3584 Cube
三位树状数组. /* 3584 */ #include <iostream> #include <string> #include <map> #include & ...
- 6N137的使用
(1)引脚图 (2)功能表 (3)内部结构图 信号从2.3脚输入,反向偏置的光敏二极管受光照后导通,经过电流电压转换,输入到与门一端,与门另一端为使能端.由于输入信号为集电极开路,需要加上拉电阻.当使 ...
- Aix项目_shell_rsh_01
rsh(remote shell) 功能说明:远端登入Shell. 语 法:rsh [-dn][-l <用户名称>][主机名称或IP地址][执行指令] 补充说明:rsh提供用户环境,也就是 ...