李氏滑动事件冲突解决方案 之 处理子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,内部滑动方向和外部滑动方向一样时,该怎么解决这一冲突呢? 针对滑动冲突这里给出两种解决方案:外部拦截法,内部拦截法. ...
随机推荐
- 002-原始jpa以及基本加载过程,基本sql使用
一.概述 1.1.创建 public void createMethod() { EntityManagerFactory factory = Persistence.createEntityMana ...
- Docker学习笔记(一):在本地安装和配置Docker
由于公司里测试服务器时常会有变动,每次变动之后都需要在新的服务器上配置一遍环境,实在是麻烦.后来我突然想到了在网上看到的资料中说Docker能快速部署可移植的容器,所以我就试着用Docker搭建了 ...
- la3523 白书例题 圆桌骑士 双联通分量+二分图
具体题解看大白书P316 #include <iostream> #include <algorithm> #include <vector> #include & ...
- 20145329 《网络对抗技术》PC平台逆向破解
shellcode注入 实践是在非常简单的一个预设条件下完成的: (1)关闭堆栈保护 (2)关闭堆栈执行保护 (3)关闭地址随机化 (4)在x32环境下 (5)在Linux实践环境 shellcode ...
- 20155201 2016-2017-2 《Java程序设计》第三周学习总结
20155201 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 - 第四章要点: 4.1类与对象 类定义时使用class关键词,基本模式为 class na ...
- 20145221 《Java程序设计》第四周学习总结
20145221 <Java程序设计>第四周学习总结 教材学习内容总结 第六章部分 - 继承与多态 何谓继承 继承 继承是Java程序设计语言面向对象的又一重要体现,允许子类继承父类,避免 ...
- openwrt编译系统生成ubi镜像的各变量解析
1.MKUBIFS_OPTS的作用 传递参数给mkfs.ubifs 2.MKUBIFS_OPTS传递了哪些参数? 传递了最小输入输出单元大小.逻辑擦除块大小.最大物理擦除块的个数,分别由选项-m.-e ...
- 可替换参数在SharePoint和VS中的使用
什么是可替换参数呢?你可能会在代码里看到像$SharePoint.Project.AssemblyFullName$一样的标记.VS会在编译的时候用完整的签名来替换相应参数.例如,标记 $ShareP ...
- OpenDayLight Helium实验三 OpenDaylight二层转发机制实验 2
鉴于在个人笔记本上虚拟机运行ODL实在太慢,把实验的场景搬到了实验室. 实验上:OpenDayLight Helium实验三 OpenDaylight二层转发机制实验 抓包实验 紧接着,在运行Mini ...
- nodejs真的是单线程吗?
[原文] 一.多线程与单线程 像java.python这个可以具有多线程的语言.多线程同步模式是这样的,将cpu分成几个线程,每个线程同步运行. 而node.js采用单线程异步非阻塞模式,也就是说每一 ...