Android手势识别简单封装类

   在做一个项目时用到了简单的手势功能(向左,向右滑切屏),于是简单地封装了下

  import android.content.Context;

  import android.util.DisplayMetrics;

  import android.view.GestureDetector;

  import android.view.GestureDetector.OnGestureListener;

  import android.view.MotionEvent;

  public class GestureHelper implements OnGestureListener {

  private GestureDetector gesture_detector;

  private int screen_width;

  private OnFlingListener listener_onfling;

  public static abstract class OnFlingListener {

  public abstract void OnFlingLeft();

  public abstract void OnFlingRight();

  }

  public GestureHelper(Context context) {

  DisplayMetrics dm = context.getResources().getDisplayMetrics();

  screen_width = dm.widthPixels;

  gesture_detector = new GestureDetector(context, this);

  }

  public void setOnFlingListener(OnFlingListener listener) {

  listener_onfling = listener;

  }

  public boolean onTouchEvent(MotionEvent event) {

  return gesture_detector.onTouchEvent(event);

  }

  @Override

  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

  // 触发条件 :

  // X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒

  final int FLING_MIN_DISTANCE = (int) (screen_width / 3.0f), FLING_MIN_VELOCITY = 200;

  if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {

  listener_onfling.OnFlingLeft();

  } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {

  listener_onfling.OnFlingRight();

  }

  return true;

  }

  @Override

  public boolean onDown(MotionEvent e) {

  return false;

  }

  @Override

  public void onLongPress(MotionEvent e) {

  }

  @Override

  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,

  float distanceY) {

  return false;

  }

  @Override

  public void onShowPress(MotionEvent e) {

  }

  @Override

  public boolean onSingleTapUp(MotionEvent e) {

  return false;

  }

  }

  使用方法如下:

  public class TestActivity extends Activity {

  private GestureHelper gh;

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_start);

  gh = new GestureHelper(this);

  gh.setOnFlingListener(new OnFlingListener() {

  @Override

  public void OnFlingLeft() {

  //向左滑动

  }

  @Override

  public void OnFlingRight() {

  //向右滑动

  }

  });

  }

  @Override

  public boolean onTouchEvent(MotionEvent event) {

  return gh.onTouchEvent(event);

  }

  }

时间: 2024-11-03 23:28:51

Android手势识别简单封装类的相关文章

深入理解Android手势识别_Android

对于触摸屏,其原生的消息无非按下.抬起.移动这几种,我们只需要简单重载onTouch或者设置触摸侦听器setOnTouchListener即可进行处理.不过,为了提高我们的APP的用户体验,有时候我们需要识别用户的手势,Android给我们提供的手势识别工具GestureDetector就可以帮上大忙了. 基础 GestureDetector的工作原理是,当我们接收到用户触摸消息时,将这个消息交给GestureDetector去加工,我们通过设置侦听器获得GestureDetector处理后的手

札记:android手势识别功能实现(利用MotionEvent)_Android

摘要 本文是手势识别输入事件处理的完整学习记录.内容包括输入事件InputEvent响应方式,触摸事件MotionEvent的概念和使用,触摸事件的动作分类.多点触摸.根据案例和API分析了触摸手势Touch Gesture的识别处理的一般过程.介绍了相关的GestureDetector,Scroller和VelocityTracker.最后分析drag和scale等一些手势的识别. 输入源分类 虽然android本身是一个完整的系统,它主要运行在移动设备的特性决定了我们在它上面开的app绝大数

图片-android一个简单动画的制作问题

问题描述 android一个简单动画的制作问题 我有一个Button,本来是这个样子,我想当按下的时候这三个样子轮流变化: 当再按下的时候变回原来的,也就是第一张的样子 怎么实现? 解决方案 制作一个简单的动画 解决方案二: j亲爱的发噶盛大而搁浅

Android Studio简单设置(转)

Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings --> Appearance --> Theme ,选择 Darcula 主题即可. 字体设置 系统字体设置 如果你的Android Studio界面中,中文显示有问题,或者选择中文目录显示有问题,或者想修改菜单栏的字体,可以这么设置.Settings --> Appearance ,勾选 Override default fonts by (

小米-Android 一个简单的post请求遇到的问题

问题描述 Android 一个简单的post请求遇到的问题 用volley的post请求,在其它手机上测试 线上path+轮播图url 返回正常的json数据,用小米4手机 返回一个404错误的html 如图: 经测试 在小米4手机上 线上path+其他url 获取的是正常json 线下测试path+轮播图url也能获取正常json 但是线上path+轮播图url就会返回该html 有没有大神知道什么原因?怎么解决?有人说是因为运营商,该手机用的移动卡,有关系吗? 解决方案 感觉可能跟移动卡有关

Android中简单的电话管理与短信管理App编写实例_Android

android电话管理器(TelephonyManger)实例:TelephonyManger是管理电话状态.网络信息的服务类. 添加权限: <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 逻辑功能:

Android中简单调用图片、视频、音频、录音和拍照的方法_Android

本文实例讲述了Android中简单调用图片.视频.音频.录音和拍照的方法.分享给大家供大家参考,具体如下: //选择图片 requestCode 返回的标识 Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT); //"android.intent.action.GET_CONTENT" innerIntent.setType(contentType); //查看类型 String IMAGE_UNSPECIFIED =

Android一个简单数据库应用

问题描述 Android一个简单数据库应用 我做了一个简单的Android数据库应用,就是一个在edittext中输入文字,点击按钮就把输入的文字保存到数据库中,但是db=dbHelper.getWritableDatabase(); 总是报错 package com.example.shujukushiyan; import android.app.Activity; import android.content.ContentValues; import android.content.Co

android:TextView简单设置文本样式和超链接的方法_Android

本文实例讲述了android:TextView简单设置文本样式和超链接的方法.分享给大家供大家参考,具体如下: 设置TextView中文本的样式(如:颜色.斜体等),可以针对不同位置的文本设置不同的样式(如:将索引范围在1-3的字符设置为黑色,2-6的字符设置为粗体等) myFirstTextView = (TextView)findViewById(R.id.myFirstTextView); myFirstTextView.setText("这是我的第一个TextView,嘿嘿"