Android 手势识别

Android 提供了GestureDetector类来识别用户的手势操作,这个类提供了两个侦听接口:OnGestureListener(处理单击类消息)与OnDoubleTagListener(处理双击类消息)。onGestureListener( )接口中有以下几个抽象方法:

// 单击,触摸屏按下时立刻触发

abstract boolean onDown(MotionEvent e);

// 抬起,手指离开触摸屏时触发(长按、滚动、滑动时,不会触发这个手势)

abstract boolean onSingleTapUp(MotionEvent e);

// 短按,触摸屏按下后片刻后抬起,会触发这个手势,如果迅速抬起则不会

abstract void onShowPress(MotionEvent e);

// 长按,触摸屏按下后既不抬起也不移动,过一段时间后触发

abstract void onLongPress(MotionEvent e);

// 滚动,触摸屏按下后移动

abstract boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);

// 滑动,触摸屏按下后快速移动并抬起,会先触发滚动手势,跟着触发一个滑动手势

abstract boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);

接口GestureListener的实现类:

package com.example.android_gester_demo; import android.util.Log; import android.view.GestureDetector.OnGestureListener; import android.view.MotionEvent; public class MyGesture implements OnGestureListener{ public MyGesture( ){ } @Override public boolean onDown(MotionEvent e) { // TODO Auto-generated method stub Log.i("----onDown-----", "--down"); return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Auto-generated method stub Log.i("------onFling----", "--fling"); return false; } @Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub Log.i("-------onLongPoress-----", "--longpress"); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Auto-generated method stub Log.i("-------onScroll------", "--scroll"); return false; } @Override public void onShowPress(MotionEvent e) { // TODO Auto-generated method stub Log.i("------onShowPress-----", "--showPress"); } @Override public boolean onSingleTapUp(MotionEvent e) { // TODO Auto-generated method stub Log.i("------onSingleTagUp-------", "--singleUp"); return false; } }

测试Activity

package com.example.android_gester_demo; import android.os.Bundle; import android.app.Activity; import android.view.GestureDetector; import android.view.Menu; import android.view.MotionEvent; public class MainActivity extends Activity { private GestureDetector detector; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); detector = new GestureDetector(this, new MyGesture()); } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return detector.onTouchEvent(event); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }

单击时打印情况:(动作:按下马上抬起)

Android 手势识别

Android 手势识别

滚动时打印情况:(动作:按下---向屏幕上方(或下左右)移动---松手,屏幕不动)

\

滑动时打印情况:(动作:按下----向屏幕上方(或下左右)移动---松手,让屏幕在惯性下自己滑动一段距离)vcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20131228/2013122809123053.jpg" alt="\">

总结:不论何种手势发生的时候,down事件总是第一个发生的。

滚动与滑动的最大区别在于,前者是在手指的“驱使”下运动的,手指离开界面后,滚动即停止;而后者开始也是在手指的“驱使”下运动的,手指离开界面后,屏幕会在惯性驱使下再滑动一段距离。

分类:默认分类 时间:2012-01-03 人气:23
本文关键词:
分享到:

相关文章

  • Android SQLite数据库操作示例 2012-01-01

    SQLite介绍 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能。此外,它还是开源的,任何人都可以使用它。 SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。 SQLite支持的数据类型参考链接:http://blog.csdn.net/wzy_1988/article/details/36005947 Android在运行时(

  • Android引路蜂地图开发示例:选择地图服务 2012-01-02

    引路蜂地图服务缺省使用Google地图服务,但你也可以选择其它地图服务,比方说当Google服务离线时,您可以选择MapAbc的地图服务,另外要注意的是中国地图是有偏移的。如果想使用无偏移的中国地图,一是采用地图偏移校正算法,另外一个是使用CloudMade地图服务。 所前所述,引路蜂地图开发包在设计时将地图图片显示和地图服务两部分设计成相对独立的两部分,Google中国地图图片,Bing中国地图图片,MapAbc中国地图图片是有偏移的地图图片,CloudMade(OpenStreet)中国地图

  • Android 关于greenDao的使用教程 2012-01-02

    关于greenDao的使用 第一篇How to get started ? 原文地址:http://greendao-orm.com/documentation/how-to-get-started/ 该教程会带你浏览一个简单的greenDao示例工程。地址:https://github.com/greenrobot/greenDAO,该工程包含两个子工程: DaoExample和DaoExampleGenerator。你可以clone到本地,运行或者直接在github上直接浏览。 如果你从gi

  • Android-Universal-Image-Loader框架学习 2012-01-03

    先来看一下Android-Universal-Image-Loader框架的用法; 1、初始化ImageLoaderConfiguration(全局的,在整个application中初始化configuration,配置缓存、加载线程等)、 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( getApplicationContext()) .threadPriority(Thread.NORM_PRIO

  • iOS和Android将在良性竞争中互存 2012-01-03

      苹果推出iPhone 4S。图/CFP   三星可弯曲屏幕概念机   Natali概念机   Kambala概念机   Windows概念机   “苹果风光将长久依旧!”,iPhone的最大竞争对手Android阵营显然不这么看。Android由Google推出,而Google董事长施密特前不久刚刚发表了对智能手机大战的见解,他表示,实际上在苹果的系统(iOS)和Android之间的竞争还会继续存在下去,而且这种竞争是非常良性的竞争。它能够把我们的价格降低,而且会把更多的投资带到市场上。目前

  • android如何在BaseAdapter内使用notifyDataSetChanged()方法以及线程的使用 2012-01-04

    有时候我们需要修改列表里的数据,并实时刷新,我们除了在在外部调用adapter.notifyDataSetChanged()方法来通知activity刷新, 如果在adapter内部有涉及到更新数据,删除或者增加数据,就可以直接在adapter内部调用notifyDataSetChanged()这个方法,前提是该listview绑定的数据有改变。 以下例子结合Handler,线程展示 public class MyAdapter extends BaseAdapter { private fin

  • Google否认Android应用认证体系被破解 2012-01-04

    Google在7月发布了新的Android应用程序许可验证服务, 以防止Android应用可被轻松破解的尴尬局面。但是这一新的版权保护形式依然很脆弱,脆弱到依然可以被轻松破解。只要用一个叫做 smali/baksmali的程序将.apk文件解包,把里面的授权验证库给移除掉,再重新打包成.apk文件就完成了破解。因为.apk文件里的授权 验证库是独立的一个部分,所以很好分离出来,完成破解。目前这一方式还存在于理论上,不过估计很快就会有人做出自动工具来实现批量.apk文件的破解。 Google迅速通

  • android 点击下弹动画实现 2012-01-04

    下弹动画的实现 下弹动画在很多应用都有使用,比如豌豆荚中的应用介绍界面,百度手机助手的应用介绍界面等。 只要熟悉android动画的使用接口,制作动画并不困难。 这里使用开源库nineoldandroids,其实和android3.0 以上直接使用动画接口是一样的。 实现效果 PS, 搞了半天GIF 才能播放。原来是最大边不能太大了。原来图片尺寸太大,被默认转成jpg了。现在总算能看到效果了。 DropDownExample.java package com.buptfarmer.devapp;

  • 细数Android十大最受欢迎的程序软件(下) 2012-01-04

      上文关于Android程序软件的介绍看的过瘾吗?这里再次为你呈现你喜爱的,你常用的,你不知道的……   6、BatteryHD   Battery HD在排行中一直很稳定的维持在第6名。它两星期之前第一次出现在thenextinstall排名榜上,目前为止安装量已经超过了100k。随着 hockey-stick发展起来, Battery HD的安装量将很快超过100万。虽然这个程序很简单,但是电池方面的应用程序在安卓程序中永远不会过时。   7、Radiant Defense   上个星期R

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.033 (s). 10 q(s)