在Android中区分点击和滑动操作
转自:http://blog.csdn.net/do168/article/details/51587933
最近在写一个图片浏览安卓应用,想要弄成全屏显示,只在单击时显示工具栏和状态栏,在触摸滑动时翻页。经过几个小时在互联网上的搜索也没找到合适的例子。
知道Android Studio的模板里有一个全屏的模板,于是使用android studio中的全屏模板新建了一个工程,启动测试了一下。应用启动时就自动隐藏了工具栏和状态栏,点击屏幕后会重新显示出来,正是我所需要的。哇,真不错。
但也有问题,触摸滑动和点击居然不分家,最终都会触发点击事件。这该怎么办呢?研究了一下setOnTouchListener事件,发现该事件最后的返回值可以影响是否还会执行后面的点击事件。也就是返回true不执行后面的事件,返回false则继续执行后面的事件。
于是写了下面的代码,来区分用户的操作意图,从页触发不同的事件。
1 private static float DownX = 0;
2 private static float DownY = 0;
3 private static float moveX = 0;
4 private static float moveY = 0;
5 private static long currentMS = 0;
6
7 。。。。。。
8
9 mContentView.setOnTouchListener(new View.OnTouchListener() {
10 @Override
11 public boolean onTouch(View v, MotionEvent event) {
12 switch (event.getAction()) {
13 case MotionEvent.ACTION_DOWN:
14 DownX = event.getX();//float DownX
15 DownY = event.getY();//float DownY
16 moveX = 0;
17 moveY = 0;
18 currentMS = System.currentTimeMillis();//long currentMS 获取系统时间
19 break;
20 case MotionEvent.ACTION_MOVE:
21 moveX += Math.abs(event.getX() - DownX);//X轴距离
22 moveY += Math.abs(event.getY() - DownY);//y轴距离
23 DownX = event.getX();
24 DownY = event.getY();
25 break;
26 case MotionEvent.ACTION_UP:
27 long moveTime = System.currentTimeMillis() - currentMS;//移动时间
28 //判断是否继续传递信号
29 if(moveTime>200&&(moveX>20||moveY>20)){
30 return true; //不再执行后面的事件,在这句前可写要执行的触摸相关代码。点击事件是发生在触摸弹起后
31 }
32 break;
33 }
34 return false;//继续执行后面的代码
35 }
36 });
上面的代码通过计算触摸时间和触摸期间移动的距离来判断用户的操作意图。
当触摸时间较长,并且移动了一定距离后,我们就断定发生了触摸滑动操作,并返回true,下再引发后面的事件;否则继续触发后面的点击事件。
我建了一个Git仓库,存放我尝试过的例子,完整 代码都放在那里。
https://code.csdn.NET/do168/androidtestcenter
欢迎下载
在Android中区分点击和滑动操作的更多相关文章
- Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?
DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了.今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决 ...
- Android中Listview点击item不变颜色以及设置listselector 无效
Android中Listview点击item不变颜色以及设置listselector 无效 这是同一个问题,Listview中点击item是会变颜色的,因为listview设置了默认的listsele ...
- android中ListView点击和里边按钮点击不能同时生效问题解决
今天遇到一个问题:android中ListView点击和里边button点击不能同时生效问题解决. 原因是: listView 在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得 ...
- android中View点击和触摸事件的处理
android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解. 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN-& ...
- android 根据距离区分 点击跟滑动事件
public void onClick(View v) { if (isclick) Log.i(TAG, "onclick"); } }); } float distance = ...
- [转]android中listview点击事件失效
首先说明一下我想实现的功能: 点击某个item之后,让其颜色发生变化.如果变化网上有很多例子,我就不班门弄斧了.Listview之所以点击没有反应是因为上图中绿色部分(自己定义的一个继承BaseAda ...
- android中listview点击事件失效的灵异事件
首先说明一下我想实现的功能: 点击某个item之后,让其颜色发生变化.如果变化网上有很多例子,我就不班门弄斧了.Listview之所以点击没有反应是因为上图中绿色部分(自己定义的一个继承BaseAda ...
- android 解决ListView点击与滑动事件冲突
如果你的ListView的Item有滑动功能,但又点击Item跳转到其它activity,这样若是在Adapter里面写点击事件是会导致滑动事件获取不到焦点而失效: 解决方法:不要在adapter里面 ...
- android中button点击频率控制
public class Utils { private static long lastClickTime; public static boolean isFastDoubleClick() { ...
随机推荐
- LeetCode-078-子集
子集 题目描述:给你一个整数数组 nums ,数组中的元素 互不相同 .返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子集.你可以按 任意顺序 返回解集. 示例说明请见LeetCode官网 ...
- LeetCode-049-字母异位词分组
字母异位词分组 题目描述:给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例说明请见LeetCode官网. 来源:力扣(LeetCode) 链接:https: ...
- Django-模板布局
- 浅浅的聊一下 WebSocket
第一次看到 ws:// 和 wss:// 时候,感觉好高级啊,还有这种协议. Websocket 历史 WebSocket是在2008年6月诞生的1.经由IEFT标准化后,2009年chrome 4第 ...
- LGP1397题解
并不是那么的有意思呢 首先,我们可以将题目给出的地推式看做一个一次函数 \(k * x+b\),来思考一个问题,如果给出两个一次函数 \(F(x)\) 和 \(G(x)\),那么 \(F(G(x))\ ...
- JDBC快速入门(附Java通过jar包连接MySQL数据库)
•通过jar包连接mysql数据库 •下载jar包 Java 连接 MySQL 需要驱动包,官网下载地址为MySQL驱动包官网下载,选择适合的jar包版本进行安装 (记得安装的地址,下面导入包时会用到 ...
- c++-投骰子
#include<iostream>#include<cstdlib>//产生随机数的函数using namespace std;enum GameStatus{WIN,LOS ...
- 实践:Linux下安装mysql8.0
镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 一.下载mysql8.0安装包 1.在local创建mysql文件夹 cd /usr/local mkdir mysql cd mysql 2.使 ...
- 什么是 Git
概述 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. ...
- 网络传输中的各种加密算法+SSL+CA证书详解
1. 数据传输分类 在互联网上数据传输有两种:明文传输和加密传输.明文传输的协议有:ftp.http.smtp.telnet.但是为了数据的完整性和安全性,所以后来引用了加密等相关手段来保证数据的安全 ...