1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.util.Log;
  4. import android.view.GestureDetector;
  5. import android.view.GestureDetector.OnGestureListener;
  6. import android.view.MotionEvent;
  7. import android.view.View;
  8. import android.view.View.OnTouchListener;
  9. import android.widget.TextView;
  10. import android.widget.Toast;
  11.  
  12. public class GestureActivity extends Activity implements OnTouchListener,
  13. OnGestureListener {
  14.  
  15. GestureDetector detector;
  16.  
  17. public GestureActivity() {
  18. detector = new GestureDetector(this);
  19. }
  20.  
  21. public void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.main);
  24. TextView tv = (TextView) findViewById(R.id.TextView001);
  25. //设置tv的******
  26. tv.setOnTouchListener(this);
  27. tv.setFocusable(true);
  28. //必须,view才能够处理不同于Tap(轻触)的hold
  29. tv.setClickable(true);
  30. tv.setLongClickable(true);
  31. detector.setIsLongpressEnabled(true);
  32. }
  33.  
  34. /*
  35. * 在onTouch()方法中,我们调用GestureDetector的onTouchEvent()方法,将捕捉到的MotionEvent交给GestureDetector
  36. * 来分析是否有合适的callback函数来处理用户的手势
  37. */
  38. public boolean onTouch(View v, MotionEvent event) {
  39. return detector.onTouchEvent(event);
  40. }
  41.  
  42. // 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
  43. public boolean onDown(MotionEvent arg0) {
  44. Log.i("MyGesture", "onDown");
  45. Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();
  46. return true;
  47. }
  48.  
  49. /*
  50. * 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
  51.  
  52. * 注意和onDown()的区别,强调的是没有松开或者拖动的状态
  53. */
  54. public void onShowPress(MotionEvent e) {
  55. Log.i("MyGesture", "onShowPress");
  56. Toast.makeText(this, "onShowPress", Toast.LENGTH_SHORT).show();
  57. }
  58.  
  59. // 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
  60. public boolean onSingleTapUp(MotionEvent e) {
  61. Log.i("MyGesture", "onSingleTapUp");
  62. Toast.makeText(this, "onSingleTapUp", Toast.LENGTH_SHORT).show();
  63. return true;
  64. }
  65.  
  66. // 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发
  67. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
  68. Log.i("MyGesture", "onFling");
  69.  
  70. // 参数解释:
  71. // e1:第1个ACTION_DOWN MotionEvent
  72. // e2:最后一个ACTION_MOVE MotionEvent
  73. // velocityX:X轴上的移动速度,像素/秒
  74. // velocityY:Y轴上的移动速度,像素/秒
  75.  
  76. // 触发条件 :
  77. // X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
  78.  
  79. final int FLING_MIN_DISTANCE = 100, FLING_MIN_VELOCITY = 200;
  80. if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
  81. // Fling left
  82. Log.i("MyGesture", "Fling left");
  83. Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();
  84. } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
  85. // Fling right
  86. Log.i("MyGesture", "Fling right");
  87. Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show();
  88. } else if(e2.getY()-e1.getY()>FLING_MIN_DISTANCE && Math.abs(velocityY)>FLING_MIN_VELOCITY) {
  89. // Fling down
  90. Log.i("MyGesture", "Fling down");
  91. Toast.makeText(this, "Fling down", Toast.LENGTH_SHORT).show();
  92. } else if(e1.getY()-e2.getY()>FLING_MIN_DISTANCE && Math.abs(velocityY)>FLING_MIN_VELOCITY) {
  93. // Fling up
  94. Log.i("MyGesture", "Fling up");
  95. Toast.makeText(this, "Fling up", Toast.LENGTH_SHORT).show();
  96. }
  97.  
  98. return false;
  99.  
  100. }
  101.  
  102. // 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
  103. public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
  104. Log.i("MyGesture", "onScroll");
  105. Toast.makeText(this, "onScroll", Toast.LENGTH_LONG).show();
  106. return true;
  107. }
  108.  
  109. // 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
  110. public void onLongPress(MotionEvent e) {
  111. Log.i("MyGesture", "onLongPress");
  112. Toast.makeText(this, "onLongPress", Toast.LENGTH_LONG).show();
  113. }
  114.  
  115. }

怎样手势的判断android GestureDetector在android开发中的更多相关文章

  1. 【Android进阶】在开发中Application到底用来做什么

    首先,在一个Android程序中,有且只有一个Application对象,在程序开始跑起来的时候,首先执行Application的onCreate方法,这是一个Android应用的入口,在开发中,我们 ...

  2. js--typeof 和 instanceof 判断数据类型的区别及开发中的使用

    前言 日常的开发中,我们经常会遇到判断一个变量的数据类型或者该变量是否为空值的情况,你是如何去选择判断类型的操作符的?本文来总结记录一下我们开发人员必须掌握的关于 typeof 和 instanceo ...

  3. Android Builder模式在开发中的应用

    最近在学习图片加载框架Glide的时候,被他精简的写法震惊了.一句话,就可以搞定. Glide.with(mContext) .load(url) .centerCrop() .placeholder ...

  4. 详细解说Android权限在安卓开发中

    android.permission.ACCESS_CHECKIN_PROPERTIES //允许读写访问”properties”表在checkin数据库中,改值可以修改上传 android.perm ...

  5. 解决使用微软模拟器VS Emulator for Android在VS2017 Xamarin开发中不能调试程序的问题。

    在使用VS2017 XAMARIN调试Android应用程序时,屏幕闪一下,进入不了调试(使用谷歌的模拟器可以调试,但是太慢), 我们现在来解决一下这个问题. 第一步:打开Hyper-V管理器 第二步 ...

  6. android GestureDetector 手势的判断

    import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.Ges ...

  7. android GestureDetector 手势基础

    1. 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(Vi ...

  8. Android手势监听类GestureDetector的使用

    在使用自定义视图的时候,对触屏事件的处理是比不可少的,有能力的可以自己写代码处理,这样更加的灵活.如果不想这么麻烦,Android提供了一个手势监听类GestureDetector,可以供我们使用.G ...

  9. Android GestureDetector方法详解

    为了加强点击.拖动响应事件,Android提供了GestureDetector手势识别类.通过GestureDetector.OnGestureListener来获取当前被触发的操作手势(Single ...

随机推荐

  1. C#_会员管理系统:开发四(日志查看)

    新建一个日志查看窗体: 日志需要的登录时间和登录状态信息由用户刚登录程序时就提供,所以在登录窗体(VIPLogin.cs)中添加代码: //定义一个全局变量 Uid; //用于获取登录成功后的用户名 ...

  2. 巡逻机器人(BFS)

    巡逻机器人问题(F - BFS,推荐) Description   A robot has to patrol around a rectangular area which is in a form ...

  3. BestCoder Round #50 (div.1) 1001 Distribution money (HDU OJ 5364)

    题目:Click here 题意:bestcoder上面有中文题目 #include <iostream> #include <cstdio> #include <cst ...

  4. [Swust OJ 781]--牛喝水

    Time limit(ms): 1000 Memory limit(kb): 65535   The cows have a line of 20 water bowls from which the ...

  5. BZOJ 2654: tree( 二分 + MST )

    我们给白色的边增加权值 , 则选到的白色边就会变多 , 因此可以二分一下. 不过这道题有点小坑... ------------------------------------------------- ...

  6. BZOJ 3282: Tree( LCT )

    LCT.. -------------------------------------------------------------------------------- #include<c ...

  7. ZOJ 1450 Minimal Circle 最小圆覆盖

    套了个模板直接上,貌似没有随机化序列 QAQ //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #in ...

  8. 编写存储过程导出oracle表数据到多个文本文件

    1.测试表和数据: create table test(id )); begin .. loop insert into test values(k,'test'||k); end loop; end ...

  9. 发送邮件给某人:mailto标签

    mailto标签 1.标签最简式 <a href="mailto:xxx@xx.com">联系站长</a> 2.标签帮你填抄送地址 <a href=& ...

  10. sql基础,必须会的————随便整理、杂乱无章

    1.sqlserver2008r2的安装 2.数据库与表的建立.增加.删除.修改. 3,索引的概念,包括聚集与非聚集的区别.全文索引的建立与如何使用全文索引. 4,重新生成索引,重新组织索引. 5,建 ...