解决ViewPager和SlidingPaneLayout的滑动事件冲突问题

问题描述:

ViewPager和SlidingPaneLayout的滑动事件冲突。

问题分析:

在手指左右滑动时,SlidingPaneLayout会屏蔽ViewPager的滑动事件。

解决办法:

自定义SlidingPaneLayout类

import android.content.Context;
import android.support.v4.view.MotionEventCompat;
import android.support.v4.widget.SlidingPaneLayout;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
public class PagerEnabledSlidingPaneLayout extends SlidingPaneLayout {
 private float mInitialMotionX;
 private float mInitialMotionY;
 private float mEdgeSlop;
 public PagerEnabledSlidingPaneLayout(Context context) {
  this(context, null);
 }
public PagerEnabledSlidingPaneLayout(Context context,
AttributeSet attrs) {
  this(context, attrs, 0);
 }
public PagerEnabledSlidingPaneLayout(Context context,
AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  ViewConfiguration config = ViewConfiguration.get(context);
  mEdgeSlop = config.getScaledEdgeSlop();
 }
 @Override
 public boolean onInterceptTouchEvent(MotionEvent ev) {
  switch (MotionEventCompat.getActionMasked(ev)) {
   case MotionEvent.ACTION_DOWN: {
    mInitialMotionX = ev.getX();
    mInitialMotionY = ev.getY();
    break;
   }
   case MotionEvent.ACTION_MOVE: {
    final float x = ev.getX();
    final float y = ev.getY();
    if (mInitialMotionX > mEdgeSlop && !isOpen() && canScroll(this, false,
      Math.round(x - mInitialMotionX), Math.round(x), Math.round(y))) {
     MotionEvent cancelEvent = MotionEvent.obtain(ev);
     cancelEvent.setAction(MotionEvent.ACTION_CANCEL);
     return super.onInterceptTouchEvent(cancelEvent);
    }
   }
  }
  return super.onInterceptTouchEvent(ev);
 }
}

以上这篇解决ViewPager和SlidingPaneLayout的滑动事件冲突问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决ViewPager和SlidingPaneLayout的滑动事件冲突问题

    问题描述: ViewPager和SlidingPaneLayout的滑动事件冲突. 问题分析: 在手指左右滑动时,SlidingPaneLayout会屏蔽ViewPager的滑动事件. 解决办法: 自定义SlidingPaneLayout类 import android.content.Context; import android.support.v4.view.MotionEventCompat; import android.support.v4.widget.SlidingPaneLay

  • ViewPager和SlidingPaneLayout的滑动事件冲突解决方法

    问题描述: ViewPager和SlidingPaneLayout的滑动事件冲突. 问题分析: 在手指左右滑动时,SlidingPaneLayout会屏蔽ViewPager的滑动事件. 解决办法: 自定义SlidingPaneLayout类 import android.content.Context; import android.support.v4.view.MotionEventCompat; import android.support.v4.widget.SlidingPaneLay

  • Android 中SwipeRefreshLayout与ViewPager滑动事件冲突解决方法

    Android 中SwipeRefreshLayout与ViewPager滑动事件冲突解决方法 问题描述: 开发中发现,SwipeRefreshLayout的下拉刷新,与ViewPager开发的banner的左右滑动事件有一点冲突,导致banner的左右滑动不够顺畅.很容易在banner的左右滑动的过程中,触发SwipeRefreshLayout的下拉刷新,从而导致banner左右滑动的体验很差. 解决方案: 可以在ViewPager的滑动时候设置SwipeRefreshLayout暂时不可用,

  • Android滑动事件冲突的解决方法

    滑动是Android中不可缺少的一部分,多个滑动必然会产生冲突,比如我们最常见的是ScrollView中嵌套了ListView,一般做法是计算出ListView的总高度,这样就不用去滑动ListView了.又比如一个ViewPager嵌套Fragment,Fragment里面又有ListView,这原本是有滑动冲突的,但是ViewPager内部去帮我们解决了这种冲突.那如果我们要自己解决冲突又该怎么办呢. 下面有两种方式来解决: 外部拦截法 外部拦截法是指在有点击事件时都要经过父容器,那么在父容

  • Android滑动事件冲突详解(一)

    首先,我们假设这样一个场景:一个ViewPager里面嵌套一个ViewPager,内部滑动方向和外部滑动方向一样时,该怎么解决这一冲突呢? 针对滑动冲突这里给出两种解决方案:外部拦截法,内部拦截法. 外部拦截法 外部拦截法是指点击事件都先经过父容器的拦截处理,如果父容器需要此拦截事件,就拦截,不需要就不拦截,这种方法比较符合点击事件的分发机制.这种方法代码如下: @Override public boolean onInterceptTouchEvent(MotionEvent ev) { ..

  • Vue中keyup.enter和blur事件冲突的问题及解决

    目录 keyup.enter和blur事件冲突问题 解决方法 keyup.enter和blur同时触发如何规避 问题描述 实现代码 解决办法 keyup.enter和blur事件冲突问题 <el-input class="input-new-tag" v-if="row.inputVisible" v-model="row.inputValue" :ref="$index" size="small"

  • Android ViewPager的事件冲突的解决办法

    Android ViewPager的事件冲突的解决办法 当我昨天做viewpager内图片的滑动时,发现图片没有滑动,反而是viewpager滑动了,后来在网上查了资料,解决的事件冲突的问题. @Override public boolean dispatchTouchEvent(MotionEvent ev) { //处理与Viewpager的事件冲突 if (mCurArrayMode==1){ getParent().requestDisallowInterceptTouchEvent(t

  • Android解决viewpager嵌套滑动冲突并保留侧滑菜单功能

    重写子pagerview的dispatchTouchEvent方法,在返回前添加一句getParent().requestDisallowInterceptTouchEvent(true)中断掉事件的传递,类如下 public class SupperViewPager extends ViewPager { private int screenWidth;//屏幕宽度 public SupperViewPager(Context context) { super(context); } pub

  • 浅谈Viewpager和轮播图的冲突解决方法

    实例如下: //解决ViewPager和轮播图滑动冲突 @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // 让当前viewpager的父控件不去拦截touch事件 getParent().requestDisallowInterceptTouchEvent(true); downX = (int) ev.ge

  • Android App中ViewPager所带来的滑动冲突问题解决方法

    叙述 滑动冲突可以说是日常开发中比较常见的一类问题,也是比较让人头疼的一类问题,尤其是在使用第三方框架的时候,两个原本完美的控件,组合在一起之后,忽然发现整个世界都不好了. 关于滑动冲突 滑动冲突分类: 滑动冲突,总的来说就是两类. 1.同方向滑动冲突 比如ScrollView嵌套ListView,或者是ScrollView嵌套自己 2.不同方向滑动冲突 比如ScrollView嵌套ViewPager,或者是ViewPager嵌套ScrollView,这种情况其实很典型.现在大部分应用最外层都是

随机推荐