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,来定制自己的手机的 ...
随机推荐
- 【转】iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)-- 不错
原文网址:http://www.cnblogs.com/JuneWang/p/3850859.html iOS页面间传值的方式(NSUserDefault/Delegate/NSNotificatio ...
- HTML入门基础教程相关知识
HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文 ...
- InnoDB关键特性之insert buffer
insert buffer 是InnoDB存储引擎所独有的功能.通过insert buffer,InnoDB存储引擎可以大幅度提高数据库中非唯一辅助索引的插入性能. 数据库对于自增主键值的插入是顺序的 ...
- Parallel for loops in .NET C# z
The start index: this is inclusive, i.e. this will be the first index value in the loop The end inde ...
- mexopencv问题:Invalid MEX file GLIBCXX_3.4.15 error
参考:http://blog.sina.com.cn/s/blog_74112f030101cmxt.html root@debian-yuliyang:/opt/matlab/sys/os/glnx ...
- 设计模式_Visitor_访问者模式
形象例子: 情人节到了,要给每个MM送一束鲜花和一张卡片,可是每个MM送的花都要针 对她个人的特点,每张卡片也要根据个人的特点来挑,我一个人哪搞得清楚,还是找花店老板和礼品店老板做一下Visitor, ...
- mybatis系列-01-JDBC
1.1 环境 java环境:jdk1.7.0_79 eclipse mysql:5.7 1.2 创建mysql数据 导入下边的脚本: 导入之后数据库: sql_table.sql:记录 ...
- flappy pig小游戏源码分析(3)——解剖util
这一节我们继续高歌猛进,如果对源码中有无论无何都理解不通的问题,欢迎和我交流,让我也学习一下,我的qq是372402487. 还是按照惯例看看我们的目录结构. 我们在前两节中已经分析了game.js, ...
- 请求码(requestCode)与结果码(resultCode)解析
Android apk开发中经常需要在活动(Activity)之间穿梭,并实现活动之间的数据传递.为了启动一个新的活动并得到该活动的返回数据,需调用方法startActivityForResult() ...
- Esper系列(十四)Contained-Event Selection
功能:该语法是针对所查询事件中的属性又是另一种属性的查询结果控制. 格式: 1 "+j); 19 bean.setBean(item); 20 list.add(bea ...