Android ScrollView与其他组件的OnTouchEvent冲突解决
来源:互联网 发布:java se8 编辑:程序博客网 时间:2024/05/22 00:31
今天改功能完善之后,产生的bug.
遇到ScrollView与其他组件的OnTouchEvent冲突.上下滑动时,你的OnTouchEvent的ACTION_DOWN事件在TextView,LinearLayout,ImageView时,被这些组件给吸收了,因为onClick点击事件是通过OnTouchEvent判断产生的.
所以,如何实现需求的效果,好头疼啊.
最后,问了一下经理,最后有了头绪,就用我的方法解决了,不是很好,如果你有更好的方法,请留言告知,谢谢.
直接上代码咯,偶们的注释是很专业的啦,要是看不懂,可以问我啊....
package com.hisun.sinldo.consult.view;import com.hisun.sinldo.R;import com.hisun.sinldo.utils.LogUtil;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.ScrollView;/** * 自定义ScrollView * * @author xuel * */public class MemberServiceScrollView extends ScrollView {/** ScrollView的子组件 */private View convertView;/** 圆形菜单组件 */private WheelMenu mWheelMenu;/** 记录上次的触摸屏事件是否操作了圆形菜单组件 */private boolean lastWheelMenuAction = false;/** ScrollView 是否滚动 */private boolean isScrollable = true;public MemberServiceScrollView(Context context, AttributeSet attrs) {super(context, attrs);}public MemberServiceScrollView(Context context, AttributeSet attrs,int defStyle) {super(context, attrs, defStyle);}public MemberServiceScrollView(Context context) {super(context);}@Overrideprotected void onScrollChanged(int l, int t, int oldl, int oldt) {super.onScrollChanged(l, t, oldl, oldt);// 获取ScrollView子组件convertView = getChildAt(0);mWheelMenu = null;// 判断是否为空if (convertView != null) {// 获取圆形菜单组件mWheelMenu = (WheelMenu) convertView.findViewById(R.id.member_wheel_menu);}}/*** * 分发触摸屏事件 */@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {LogUtil.i(VIEW_LOG_TAG, "" + ev.getAction());// 判断,是否上次的触摸屏事件是否操作了圆形菜单组件if (lastWheelMenuAction) {// 判断,如果是ACTION_CANCEL,或者ACTION_UP,将lastWheelMenuAction恢复到默认if (ev.getAction() == MotionEvent.ACTION_CANCEL|| ev.getAction() == MotionEvent.ACTION_UP) {lastWheelMenuAction = false;//ScrollView允许滚动isScrollable = true;}// /返回,将事件交给子组件处理,那样就不会影响圆形菜单的转动效果return false;}// 判断,当触摸屏事件的ACTION_DOWN按下事件触发后,进行判断// 1.圆形菜单不为空// 2.菜单的高度 - 总共滑动的Y轴 > 按下的Y轴// 3.菜单的宽度 > 按下的X轴 && mWheelMenu.getMeasuredWidth() + 20 > ev.getX()// 4.菜单的高度 - 总共滑动的Y轴 > 总共滑动的Y轴if (mWheelMenu != null&& mWheelMenu.getMeasuredHeight() - getScrollY() > ev.getY()&& mWheelMenu.getMeasuredHeight() - getScrollY() > getScrollY()) {// 操作了菜单lastWheelMenuAction = true;//ScrollView不允许滚动isScrollable = false;// 返回,将事件交给子组件处理,那样就不会影响圆形菜单的转动效果return false;} else {//ScrollView允许滚动isScrollable = true;// 返回默认的return super.onInterceptTouchEvent(ev);}}@Overridepublic boolean onTouchEvent(MotionEvent ev) {//判断是否滑动if (isScrollable) {return super.onTouchEvent(ev);} else {return false;}}}呵呵,写的不是很好,希望大家提出批评,偶们来改正...
0 0
- Android ScrollView与其他组件的OnTouchEvent冲突解决
- 【安卓学习之常见问题】 ScrollView与其他组件的冲突问题
- 解决jquery与其他库的冲突
- 解决jquery与其他库的冲突
- Android ScrollView 与其他 子View 滚动条冲突
- 解决Three20与其他framework冲突的办法
- 解决Three20与其他framework冲突的办法
- 解决jQuery与其他库冲突的方法
- 解决viewpager与其他可以左右滑动的事件冲突
- jQuery 随笔 之 与其他JS库冲突的解决
- jQuery与其他JS框架冲突解决
- 解决jQuery库与其他库冲突
- jquery与其他js冲突问题 解决
- ScrollView与其子控件事件冲突的解决,以及怎样去禁止ScrollView的惯性滑动
- jQuery与其他库冲突的解决方法
- jQuery与其他库冲突的解决方法
- jquery与其他包冲突的解决办法
- Android:解决ScrollView 和 ListView 的冲突
- Nginx系列(九.nginx日志分割)
- IOS中集合视图UICollectionView中DecorationView的简易使用方法
- 冒泡排序
- 在VMware上安装Ubuntu
- Linux查看CPU和内存使用情况
- Android ScrollView与其他组件的OnTouchEvent冲突解决
- 苏州信用卡套现18626261917
- 铝木型材窗说明4
- Linux下查看文件和文件夹大小
- C#入口程序解读
- 今天软件工作室
- 天神小学
- SqlParameter的用法
- 详解coredump