欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android屏幕手势检测的实现代码

程序员文章站 2024-02-10 11:14:53
android 关于手势的操作提供两种形式:一种是针对用户手指在屏幕上划出的动作而进行移动的检测,这些手势的检测通过android提供的监听器来实现;另一种是用 户手指在屏...

android 关于手势的操作提供两种形式:一种是针对用户手指在屏幕上划出的动作而进行移动的检测,这些手势的检测通过android提供的监听器来实现;另一种是用 户手指在屏幕上滑动而形成一定的不规则的几何图形(即为多个持续触摸事件在屏幕形成特定的形状);本文给大家分享android屏幕手势检测的实现代码。

android屏幕手势检测的原理是由于触摸事件的检测与识别比较繁琐,因此android提供了手势检测器帮助开发者识别手势。利用手势检测器可以自动辨别常用的几个手势事件,如点击、长按、滑动等,从而使开发者专注于业务逻辑,不必在手势的行为判断上绞尽脑汁。

layout/activity_gesture_detector.xml界面布局代码如下:

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:paddingtop="10dp">
  <textview
    android:id="@+id/tv_gesture"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="这里查看手势结果"
    android:textcolor="@color/black"
    android:textsize="17sp" />
</linearlayout>

gesturedetectoractivity.java逻辑代码如下:

package com.fukaimei.gesturedetector;
import android.os.bundle;
import android.support.v7.app.appcompatactivity;
import android.view.gesturedetector;
import android.view.motionevent;
import android.widget.textview;
import com.fukaimei.gesturedetector.util.dateutil;
public class gesturedetectoractivity extends appcompatactivity {
  private textview tv_gesture;
  private gesturedetector mgesture;
  private string desc = "";
  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_gesture_detector);
    tv_gesture = (textview) findviewbyid(r.id.tv_gesture);
    mgesture = new gesturedetector(this, new mygesturelistener());
  }
  public boolean dispatchtouchevent(motionevent event) {
    mgesture.ontouchevent(event);
    return true;
  }
  final class mygesturelistener implements gesturedetector.ongesturelistener {
    @override
    public final boolean ondown(motionevent event) {
//     desc = string.format("%s%s 您按下来了\n", desc, dateutil.getnowtime());
//     tv_gesture.settext(desc);
      //ondown的返回值没有作用,不影响其它手势的处理
      return true;
    }
    @override
    public final boolean onfling(motionevent e1, motionevent e2, float velocityx, float velocityy) {
      float offsetx = e1.getx() - e2.getx();
      float offsety = e1.gety() - e2.gety();
      if (math.abs(offsetx) > math.abs(offsety)) {
        if (offsetx > 0) {
          desc = string.format("%s%s 您向左滑动了一下\n", desc, dateutil.getnowtime());
        } else {
          desc = string.format("%s%s 您向右滑动了一下\n", desc, dateutil.getnowtime());
        }
      } else {
        if (offsety > 0) {
          desc = string.format("%s%s 您向上滑动了一下\n", desc, dateutil.getnowtime());
        } else {
          desc = string.format("%s%s 您向下滑动了一下\n", desc, dateutil.getnowtime());
        }
      }
      tv_gesture.settext(desc);
      return true;
    }
    @override
    public final void onlongpress(motionevent event) {
      desc = string.format("%s%s 您长按了一下下\n", desc, dateutil.getnowtime());
      tv_gesture.settext(desc);
    }
    @override
    public final boolean onscroll(motionevent e1, motionevent e2, float distancex, float distancey) {
      return false;
    }
    @override
    public final void onshowpress(motionevent event) {
    }
    @override
    public boolean onsingletapup(motionevent event) {
      desc = string.format("%s%s 您轻轻点了一下\n", desc, dateutil.getnowtime());
      tv_gesture.settext(desc);
      //返回true表示我已经处理了,别处不要再处理这个手势
      return true;
    }
  }
}

demo程序运行效果界面截图如下:

Android屏幕手势检测的实现代码

总结

以上所述是小编给大家介绍的android屏幕手势检测的实现代码,希望对大家有所帮助