在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() { ...
随机推荐
- JZ-065-矩阵中的路径
矩阵中的路径 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路 ...
- LeetCode-008-字符串转换整数 (atoi)
字符串转换整数 (atoi) 题目描述:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAt ...
- 【SpringMVC从入门到精通】00-SpringMVC 简介
笔记来源:[尚硅谷]SpringMVC教程丨一套快速上手spring mvc 目录 SpringMVC 简介 1.课程介绍 2.什么是 MVC? 3.什么是 SpringMVC? 4.SpringMV ...
- LGP3702题解
很容易想到容斥,计算不包含质数的方案数和总方案数. 设 \(f[n][i]\) 表示长度为 \(n\) 的序列,每个元素的和对 \(p\) 取模的结果. 容易有 \(f[n][i]=\sum_{j=0 ...
- 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件
目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...
- WOE(weight of evidence, 证据权重)
1. WOE(weight of evidence, 证据权重) WOE是一种衡量正常样本( Good)和违约样本( Bad)分布的差异方法 WOE=ln(Distr Good/Distr Bad)例 ...
- unicode和unicode编码
unicode编码是什么? 这其实是两个问题,unicode 是什么什么?unicode是怎样编码的? What is Unicode? Unicode provides a unique numbe ...
- CentOS 8 EOL如何切换源?
镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 CentOS 8操作系统版本结束了生命周期(EOL),Linux社区已不再维护该操作系统版本.建议您切换到Anolis或Alinux.如果您的业 ...
- bzoj2989 数列(KDTree)
bzoj2989 数列(KDTree) bzoj 该说不愧是咱,一个月才水一篇题解然后还水的一批 题目描述: 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和 ...
- mysql innodb事务的ACID及其实现的保证机制
MySQL事务的ACID,一致性是最终目的.保证一致性的措施有:A原子性:靠undo log来保证(异常或执行失败后进行回滚).D持久性:靠redo log来保证(保证当MySQL宕机或停电后,可以通 ...