Android屏幕手势检测的实现代码
程序员文章站
2023-08-12 13:11:43
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屏幕手势检测的实现代码,希望对大家有所帮助