Android屏幕手势检测的实现代码
时间:2022-07-28
本文章向大家介绍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屏幕手势检测的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ZaLou.Cn网站的支持!
- 使用spark对hive表中的多列数据判重
- 如何从微信公众平台上下载关注用户(备份微信关注用户)
- 使用hive客户端java api读写hive集群上的信息
- 大数据算法设计模式(1) - topN spark实现
- redis性能调优笔记(can not get Resource from jedis pool和jedis connect time out)
- thrift例子:python客户端/java服务端
- springboot与thrift集成实现服务端和客户端
- 调用{dede:likewords}为dedecms添加相关搜索词
- 重新调整Keras中长短期记忆网络的输入数据
- Linux内存(手动释放cache)
- django中间件Middleware
- springboot kafka集成(实现producer和consumer)
- 分布式锁的实现(redis)
- springboot scheduled并发配置
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- MySQL 8.0 安装部署3个注意事项
- 打卡群刷题总结0802——反转链表 II
- 打卡群刷题总结0801——解码方法
- 动手写简单的嵌入式操作系统二
- C++核心准则E.6:使用RAII防止资源泄露
- C++核心准则E.12: 当不可能或不愿意通过抛出异常退出函数时使用noexcept
- C++核心准则E.13: 直接拥有一个对象所有权时永远不要抛出异常
- C++核心准则E.14:使用根据目的设计的用户定制类型异常(非内置类型)
- C++核心准则E.16:析构函数,内存释放和swap操作永远不能失败
- Eclipse配合GDB和jlinkGDBServer仿真调试STM32
- 单片机程序构架
- 打卡群刷题总结0730——格雷编码
- 常用的vim配置,_vimrc文件
- 算法篇:链表之删除和为0的元素
- 算法篇:链表之反转链表