在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() { ...
随机推荐
- Chapter04 运算符(Operator)
Chapter04 运算符 目录 Chapter04 运算符 4.1 算数运算符 4.2 关系运算符 4.3 逻辑运算符 4.4 赋值运算符 4.5 三元运算符 4.6 运算符的优先级 4.7 标识符 ...
- Chapter02 Java概述
Chapter02 Java概述 目录 Chapter02 Java概述 2.1 什么是程序 程序: 2.2 Java的重要特点 2.3 Java 运行机制及运行过程 2.3.1 Java 语言的特点 ...
- LeetCode-016-最接近的三数之和
最接近的三数之和 题目描述:给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只 ...
- SQL Server的Linked Servers(链接)
我们在使用SQL Server时,有时会有这种需求,需要从一个SQL Server服务器A中,查询另一个SQL Server服务器B中的表,然后将SQL Server服务器A中的表和SQL Serve ...
- php 23种设计模式 - 解释器模式
给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子.角色:环境角色(PlayContent):定义解释规则的全局信息.抽象解释器(Empress):定义了部 ...
- 『现学现忘』Docker常用命令 — 19、容器常用命令(一)
目录 1.新建并启动容器 2.列出当前所有正在运行的容器 3.退出容器 4.启动容器 5.重启容器 6.停止容器 7.强制停止容器 8.删除已停止的容器 有镜像才能创建容器,这是根本前提. 我们下载一 ...
- python程序的三种执行结构
一.分支结构:根据条件判断的真假去执行不同分支对应的子代码 1.1 if判定 完整语法如下: if 条件1: #条件可以是任意表达式,如果条件1为True,则依次执行代码. 代码1 代码2 ... e ...
- C++移动语义 详细讲解【Cherno C++教程】
移动语义 本文是对<最好的C++教程>的整理,主要是移动语义部分,包含视频85p左值和右值.89p移动语义与90p stdmove和移动赋值操作符. 移动语义是C++11的新feature ...
- 『现学现忘』Docker基础 — 27、Docker镜像的commit操作
目录 1.commit命令作用 2.commit命令说明 3.示例演示 1.commit命令作用 在运行的容器中,并在镜像的基础上做了一些修改,我们希望保存起来,封装成一个新的镜像,方便我们以后使用, ...
- burp token爆破(DVWA high暴力破解)
一.选择Pitchfork模式.选择要爆破的参数 二.options设置 找到optiops(设置)把线程设为1 配置Grep=Extract,点添加 点击Refetch response 获取返回 ...