转自: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中区分点击和滑动操作的更多相关文章

  1. Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?

    DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了.今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决 ...

  2. Android中Listview点击item不变颜色以及设置listselector 无效

    Android中Listview点击item不变颜色以及设置listselector 无效 这是同一个问题,Listview中点击item是会变颜色的,因为listview设置了默认的listsele ...

  3. android中ListView点击和里边按钮点击不能同时生效问题解决

    今天遇到一个问题:android中ListView点击和里边button点击不能同时生效问题解决. 原因是: listView 在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得 ...

  4. android中View点击和触摸事件的处理

    android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解. 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN-& ...

  5. android 根据距离区分 点击跟滑动事件

    public void onClick(View v) { if (isclick) Log.i(TAG, "onclick"); } }); } float distance = ...

  6. [转]android中listview点击事件失效

    首先说明一下我想实现的功能: 点击某个item之后,让其颜色发生变化.如果变化网上有很多例子,我就不班门弄斧了.Listview之所以点击没有反应是因为上图中绿色部分(自己定义的一个继承BaseAda ...

  7. android中listview点击事件失效的灵异事件

    首先说明一下我想实现的功能: 点击某个item之后,让其颜色发生变化.如果变化网上有很多例子,我就不班门弄斧了.Listview之所以点击没有反应是因为上图中绿色部分(自己定义的一个继承BaseAda ...

  8. android 解决ListView点击与滑动事件冲突

    如果你的ListView的Item有滑动功能,但又点击Item跳转到其它activity,这样若是在Adapter里面写点击事件是会导致滑动事件获取不到焦点而失效: 解决方法:不要在adapter里面 ...

  9. android中button点击频率控制

    public class Utils { private static long lastClickTime; public static boolean isFastDoubleClick() { ...

随机推荐

  1. 矩池云上如何快速安装nvcc

    若您想要使用 nvcc,但是所选的镜像中没有预装 nvcc,可按照如下操作自行安装. 1.检查系统版本 source /etc/os-release && echo $VERSION_ ...

  2. es6 快速入门 系列 —— 对象

    其他章节请看: es6 快速入门 系列 对象 试图解决的问题 写法繁杂 属性初始值需要重复写 function createPeople(name, age){ // name 和 age 都写了 2 ...

  3. Kafka的优秀设计学习

    一.Kafka基础 消息系统的作用 应该大部份小伙伴都清楚,用机油装箱举个例子 所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用. 引入一个场景,我们知道中国移动,中国 ...

  4. Mybatis中Log4j日志的使用

    参考资料: (1). 百度百科:https://baike.baidu.com/item/log4j/480673?fr=aladdin (2). B站狂神的视频:https://www.bilibi ...

  5. oracle 如何在表中有数据的情况下,修改表字段的类型或者增加表字段的长度

    场景:项目中某张表的字段长度不够用了,现在要增加其长度 分两种情况: 1.表中没有数据的情况,直接一条sql语句就能解决 alter     table    表名    modify(字段名   字 ...

  6. web服务器-nginx反向代理

    web服务器-nginx反向代理 一. 代理介绍 代理是网络中使用比较常见的, 比如我们说的最多的就是FQ软件, 比如ss, 蓝灯等这些大家常用的软件,他们就是能改代理大家访问的国内无法访问的一些国外 ...

  7. python 命令行参数学习(二)

    照着例子看看打打,码了就会.写了个命令行参数调用进行运算的脚本. 参考文章链接:http://www.jianshu.com/p/a50aead61319 #-*-coding:utf-8-*- __ ...

  8. z-index原理及适用范围

    z-index原理及适用范围 原理 z-index这个属性控制着元素在z轴上的表现形式,堆叠顺序是当前元素位于z轴上的值,数值越大说明元素的堆叠1顺序越高,越靠近屏幕. 适用范围 <div cl ...

  9. JAVA 用命令提示符执行java找不到或者无法加载主类

    使用cmd编译执行java文件时候,报错---找不到或者无法加载主类如下图 把红色部分去掉,再次编译执行如下解决问题 ,执行成功!!!!!! 2.当我们在eclipes中执行运行的时候 ggggggg ...

  10. leedcode算法

    1.LeetCode - 合并两个链表 2. 3. 链表是否有环       https://jingyan.baidu.com/article/066074d69afb8d83c31cb068.ht ...