李氏滑动事件冲突解决方案 之 处理子ViewGroup的超棒方案
父ViewGroup(CurView) 和 子 ViewGroup(ParentView) 滑动事件冲突解决方案 之 处理子ViewGroup的超棒方案:
子ViewGroup 以 SlipRelativeLayout 为例子:
- 当 mEnableX=true, mEnableY=false 时, SlipRelativeLayout 中所有的 横向滑动事件都交给自己处理,横向滑动事件都交给 ParentView 处理;
- 当 mEnableX=false, mEnableY=true 时, SlipRelativeLayout 中所有的 纵向滑动事件都交给自己处理,纵向滑动事件都交给 ParentView 处理;
- 当 mEnableX=true, mEnableY=true 时, SlipRelativeLayout 中所有的 横向和纵向滑动事件都交给自己处理,ParentView 不处理任何事件;
- 当 mEnableX=false, mEnableY=false 时, SlipRelativeLayout 中所有的 自己不处理任何滑动事件,所有事件都交给 ParentView 处理;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewParent;
import android.widget.RelativeLayout; public class SlipRelativeLayout extends RelativeLayout { public static final String TAG = "SlipRelativeLayout"; private boolean mEnable = false, mEnableX = true, mEnableY = false; private float xDistance, yDistance;
private float xStart, yStart;
private float xEnd, yEnd; public SlipRelativeLayout(@NonNull Context context) {
super(context);
} public SlipRelativeLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
} public SlipRelativeLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
} public boolean ismEnable() {
return mEnable;
} public void setmEnable(boolean mEnable) {
this.mEnable = mEnable;
} public boolean ismEnableX() {
return mEnableX;
} public void setmEnableX(boolean mEnableX) {
this.mEnableX = mEnableX;
} public boolean ismEnableY() {
return mEnableY;
} public void setmEnableY(boolean mEnableY) {
this.mEnableY = mEnableY;
} @Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev); } @Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (null == ev) return false;//不截事件
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xStart = ev.getX();
yStart = ev.getY();
getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_MOVE:
xEnd = ev.getX();
yEnd = ev.getY();
xDistance = xEnd - xStart;
yDistance = yEnd - yStart;
getParent().requestDisallowInterceptTouchEvent(needIntercept());
break;
default:
break; }
return super.dispatchTouchEvent(ev);
} private boolean needIntercept() {
ViewParent viewparent = getParent();
if (null != viewparent) {
boolean disallowIntercept;
float distance = Math.abs(xDistance) - Math.abs(yDistance);
if ((mEnableX && distance > 0) || (mEnableY && distance < 0) || mEnable) {//拦截X事件向下分发
disallowIntercept = true;
} else {
disallowIntercept = false;
}
return disallowIntercept;
}
return false;
} }
李氏滑动事件冲突解决方案 之 处理子ViewGroup的超棒方案的更多相关文章
- 重写ListView解决ListView内部ViewPaper滑动事件冲突问题
非常easy 重写ListView 其它类似问题解决ScrollView嵌套ViewPager出现的滑动冲突问题 http://blog.csdn.net/zhangyiacm/article/det ...
- webview滑动事件 与内部html左右滑动事件冲突问题的解决办法
最近在做个混合app , 用html做页面,然后通过webview嵌套在activity中,效果是这样: 开始还是比较顺利,增加了菜单退出按钮,返回键页面回退功能,页面加载显示加载图标(在app端实现 ...
- Android onTouch、OnLongClick、onClick和ScrollView滑动事件冲突
为了实现近期录制的长按,松开手指,结束录制功能.在项目,难道你去走一走会头晕,书写demo为了下一个梳理. 顺便研究android事件调用机制. 先上效果界面: 布局: <RelativeLay ...
- Android 解决Gallery下ScrollView滑动事件冲突
在Gallery下,里面内容过长超出屏幕,这时我们可以用ScrollView来滚动,但是这样做了以后,会发现一个问题,Gallery的滑动事件和ScrollView的滑动事件起冲突,这时我们可以自定义 ...
- SwipeRefreshLayout与ViewPager滑动事件冲突解决
问题描写叙述: 开发中发现,SwipeRefreshLayout的下拉刷新,与ViewPager开发的banner的左右滑动事件有一点冲突,导致banner的左右滑动不够顺畅. 非常easy在bann ...
- android 解决ListView点击与滑动事件冲突
如果你的ListView的Item有滑动功能,但又点击Item跳转到其它activity,这样若是在Adapter里面写点击事件是会导致滑动事件获取不到焦点而失效: 解决方法:不要在adapter里面 ...
- Android动画及滑动事件冲突解决(转载)
原文链接:http://blog.csdn.net/singwhatiwanna/article/details/38168103 Android开发中动画和事件处理是程序员迈向高手的必经之路,也是重 ...
- Android viewpager 嵌套 viewpager滑动 点击事件冲突解决方案
为了解决这个问题.可以自定义viewpager,然后在里面监听首饰,自定义点击事件 package com.hpuvoice.view; import android.content.Context; ...
- Android滑动事件冲突
首先,我们假设这样一个场景:一个ViewPager里面嵌套一个ViewPager,内部滑动方向和外部滑动方向一样时,该怎么解决这一冲突呢? 针对滑动冲突这里给出两种解决方案:外部拦截法,内部拦截法. ...
随机推荐
- STL学习笔记--算法
关于STL算法需要注意的是: (1) 所有STL算法被设计用来处理一个或多个迭代器区间.第一个区间通常以起点和终点表示,至于其他区间,多数情况下只需提供起点即可,其终点可自动以第一区间的元素数推导出来 ...
- JavaScript性能优化小窍门汇总(含实例)
在众多语言中,JavaScript已经占有重要的一席之地,利用JavaScript我们可以做很多事情 , 应用广泛.在web应用项目中,需要大量JavaScript的代码,将来也会越来越多.但是由于J ...
- C# 使用 wkhtmltopdf 把HTML文本或文件转换为PDF
一.简介 之前也记录过一篇关于把 HTML 文本或 HTML 文件转换为 PDF 的博客,只是之前那种方法有些局限性. 后来又了解到 wkhtmltopdf.exe 这个工具,这个工具比起之前的那种方 ...
- uva1025 dp
这题说的是给了n个车站 从1号 车站到 n号车站,有m1辆车从1 开往n 有m2 辆车从n 开往1 一个人从1 车站 到达n 车站在T 时刻 要求再 车站呆的时间尽量少 dp[i][j] 表示 在 第 ...
- 基于SSH RSA的信任关系
RSA 非对称加密算法 client ---> server 私钥 公钥 1. 客户端生成密钥对 ssh-keygen -t rsa 执行后产生的密钥对会分别追加写到当前用户家目录下的以下文 ...
- JavaScript实现Map功能
JavaScript中没有类似Java中的Map集合类的实现,自己做了简单实现,如下: function Map() { this.elements = new Array(); this.size= ...
- ubuntu下 adb devices找不到devices
不同手机用数据线与ubuntu连接后,执行adb devices,好多出现找不到devices的情况. 这里解决措施: 1. 执行lsusb(连接手机前与后) 找到显示内容的差异项: root@loc ...
- [one day one question] express 不缓存如何实现
问题描述: express 默认缓存,这怎么破? 解决方案: apiRoutes.use(function (req, res, next) { res.setHeader('Cache-Contro ...
- [POI2006][luogu3435] OKR-Periods of Words [kmp+next数组]
题面 传送门 思路 先把题面转成人话: 对于给定串的每个前缀i,求最长的,使这个字符串重复两边能覆盖原前缀i的前缀(就是前缀i的一个前缀),求所有的这些"前缀的前缀"的长度和 利用 ...
- #ZLYD团队第二周项目总结
ZLYD团队第二周项目总结 项目进展 确定项目内容.目标.实现计划 首先确定游戏界面的游戏区域中墙的位置,绘制其图形,并通过其中的方法,返回墙壁的位置等属性. 根据豆子的位置,绘制其图形. 初始化吃豆 ...