Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题
之前写过关于HorizontalScrollView滑动和按钮事件触发问题,但是不能所有的情况,最近几天一直在想这个问题,今天有一个比较好的解决思路,最终应用在项目里面效果也很好,首先说明一下功能:
(1)、按下按钮,不滑动,触发按钮功能
(2)、按下按钮,滑动触发滑动事件
这里的按下包含长按和短按情况
首先要解决这个问题需要明白Android中的Touch事件是如何进行处理的,这里有一篇文章:http://blog.csdn.net/jwzhangjie/article/details/9718693 里面详细介绍了Touch事件处理方法,总结性语句:
public void checkRange(int value){
try {
if (value <= AppInforToSystem.bottom_btn_scroll_range / 2) {
value = 0;
smoothScrollTo(0, 0);
AppInforToSystem.bottom_btn_scroll_flag = 2;
}else if (value >= (diff_scroll - AppInforToSystem.bottom_btn_scroll_range / 2)) {
smoothScrollTo(diff_scroll, 0);
AppInforToSystem.bottom_btn_scroll_flag = 1;
}else {
int val = value / AppInforToSystem.bottom_btn_scroll_range;
int diff = value % AppInforToSystem.bottom_btn_scroll_range;
if (diff < AppInforToSystem.bottom_btn_scroll_range / 2) {
smoothScrollTo(AppInforToSystem.bottom_btn_scroll_range * val, 0);
}else {
smoothScrollTo(AppInforToSystem.bottom_btn_scroll_range * (val+1), 0);
}
AppInforToSystem.bottom_btn_scroll_flag = 0;
}
this.computeScroll();
} catch (Exception e) {
AppInforToSystem.bottom_btn_scroll_flag = 0;
}
}
更需要注意的是里面this.computeScroll();一定要加上,不然会出现按钮和上面的文字分离的现象,
View view = (View) this.getChildAt(this.getChildCount() - 1);
diff_scroll = view.getRight() - getWidth();//初始状态为0,没有滚动,如果滚动到右边,则等于subViewWidth - width
HorizontalScrollView只能有一个子孩子,所以要实现滑动多个组件的时候,需要使用LinearLayout或者RelativeLayout.
case MotionEvent.ACTION_DOWN:
if(AppInforToSystem.bottom_btn_scroll_flag != 3){
AppInforToSystem.bottom_btn_scroll_flag = 3;
AppConnect.getInstance().callBack(CustomerInterface.MESSAGE_SCROLL_LR_FLAG);
}
case MotionEvent.ACTION_MOVE:
if(AppInforToSystem.bottom_btn_scroll_flag != 3){
AppInforToSystem.bottom_btn_scroll_flag = 3;
AppConnect.getInstance().callBack(CustomerInterface.MESSAGE_SCROLL_LR_FLAG);
}
break;
有的人会问为什么在ACTION_DOWN检测了还要在ACTION_MOVE进行检测,这个你就需要之前那篇文章里面的内容,Touch事件会一直传递到子view上面,所以不会触发HorizontalScrollView的ACTION_DOWN事件,如果你移动按钮,首先出发的是按钮的MOVE事件,如果你移动幅度大的话就会触发HorizontalScrollView的ACTION_MOVE事件
Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题的更多相关文章
- Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?
DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了.今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决 ...
- Android中AppWidget的分析与应用:AppWidgetProvider .
from: http://blog.csdn.net/thl789/article/details/7887968 本文从开发AppWidgetProvider角度出发,看一个AppWidgetPrv ...
- Android 中图片压缩分析(上)
作者: shawnzhao,QQ音乐技术团队一员 一.前言 在 Android 中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种:其一是质量压缩,其二是下采样压缩. 前者是在不改变图片尺寸的情 ...
- 浅析Android中的消息机制-解决:Only the original thread that created a view hierarchy can touch its views.
在分析Android消息机制之前,我们先来看一段代码: public class MainActivity extends Activity implements View.OnClickListen ...
- android 的touch event分析
android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解. 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN ...
- android中SELINUX规则分析和语法简介【转】
本文转载自:https://blog.csdn.net/LoongEmbedded/article/details/62430039 1. SELINUX是可以理解为一种Android上面的安全机制, ...
- Android中父View和子view的点击事件的执行过程
Android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解. 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN- ...
- android 中百度地图 关于地图缩放所调用的事件
在做百度地图的时候 javascript 有个地图缩放的事件 但是在android 的API里面却没有,但是还好 官方给了一个MapStatusChangeListener,是这样介绍的 百度地图S ...
- android中SELINUX规则分析和语法简介
1. SELINUX是可以理解为一种android上面的安全机制,是有美国国家安全局和一些公司设计的一个针对linux的安全加强系统我们可以通过配置SELINUX的相关policy,来定制自己的手机的 ...
随机推荐
- ArcScene三维制作
转自:http://www.360doc.com/content/11/0818/10/7534722_141363009.shtml 1.0 添加地图数据 数据显示效果: 1.1 设置图层的显示顺序 ...
- POJ 1258 Agri-Net
题意:给一个无向图的邻接矩阵,求最小生成树. 解法:Kruskal算法.把边按边权排序,从小到大插入生成树中,如果一个边的两个点都在生成树中则不插入,用并查集维护. 代码: #include<s ...
- 换博客啦o(* ̄▽ ̄*)ブ啦啦啦啦啦
csdn总挂···而且觉得这里比较好看啦啦啦啦啦 一键搬家真好用TUT不用贴原地址了呢
- Amoeba搞定mysql主从读写分离
前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...
- 求大于整数m且紧靠m的k个素数 及 判断一个数是否为素数的方法
题目: 请编写一个函数void fun(int m,int k ,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中. 例如,若输入:17,5,则应输出:19,23 ...
- Linux Add a Swap File
http://www.cyberciti.biz/faq/linux-add-a-swap-file-howto/ Procedure To Add a Swap File Under Linux Y ...
- js特效第九天
offset家族(获取元素尺寸) offsetWidth得到对象的宽度,自己的,与他人无关 offsetWidth = width+border+padding,不包含margin offsetHei ...
- 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
3.暂停游戏 暂停游戏概述: 在游戏进行时,玩家有可能会遇到多种突发事件.在跑酷游戏中突发状况的发生对游戏的影响更甚,游戏进行时玩家死亡,游戏只能从头开始,那么如果因为外界因素而影响游戏的进行,显然是 ...
- Java修饰符关键词大全
所以我以此主题写了这篇文章.这也是一个可用于测试你的计算机科学知识的面试问题. Java修饰符是你添加到变量.类和方法以改变其含义的关键词.它们可分为两组: 访问控制修饰符 非访问修饰符 让我们先来看 ...
- ios 对象的集合类(collection classes)
当你着手为你的应用编写代码的时候,你会发现有许多可供使用的Objective-C的框架类,其中尤其重要的就是基础框架类,它为平台所有的应用提供基础服务.基础框架类中包括了表示字符串和数字等基本数据类型 ...