android viewpager滑动与slidingpanelayout冲突怎么解决
2个回答
展开全部
ListView中嵌套ViewPage有或者滑动手势冲突解决
在listview 上使用 addHeaderView 在第一栏添加 viewpager 当做header
如:
当触发 滑动事件 的时候容易引起 滑动冲突 (比如斜着滑动viewpager 的时候 listview会跳动)
特别是在 下拉刷新或者上拉加载 的时候 , 组件可能会传递到viewpager当中
查阅了很多的帖子 发现修改起来都非常麻烦
(1)解决方案
1. 针对viewpager 做了些修改
替换掉support.v4当中的viewpager即可:
[java] view plain copy
package com.example.bz_viewpager;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewGroup;
/**
* viewpage 和listview 相互冲突 将父view 传递到viewpage 里面
*
* 使用父类的方法 parent.requestDisallowInterceptTouchEvent(true);
*
* 当 requestDisallowInterceptTouchEvent 如果为true的时候 表示:父view 不拦截子view的touch 事件
*
* 这个方法只是改变flag
*
* @author baozi
*
*/
public class DecoratorViewPager extends ViewPager {
private ViewGroup parent;
public DecoratorViewPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public DecoratorViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setNestedpParent(ViewGroup parent) {
this.parent = parent;
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (parent != null) {
parent.requestDisallowInterceptTouchEvent(true);
}
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
if (parent != null) {
parent.requestDisallowInterceptTouchEvent(true);
}
return super.onInterceptTouchEvent(arg0);
}
@Override
public boolean onTouchEvent(MotionEvent arg0) {
if (parent != null) {
parent.requestDisallowInterceptTouchEvent(true);
}
return super.onTouchEvent(arg0);
}
}
在listview 上使用 addHeaderView 在第一栏添加 viewpager 当做header
如:
当触发 滑动事件 的时候容易引起 滑动冲突 (比如斜着滑动viewpager 的时候 listview会跳动)
特别是在 下拉刷新或者上拉加载 的时候 , 组件可能会传递到viewpager当中
查阅了很多的帖子 发现修改起来都非常麻烦
(1)解决方案
1. 针对viewpager 做了些修改
替换掉support.v4当中的viewpager即可:
[java] view plain copy
package com.example.bz_viewpager;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewGroup;
/**
* viewpage 和listview 相互冲突 将父view 传递到viewpage 里面
*
* 使用父类的方法 parent.requestDisallowInterceptTouchEvent(true);
*
* 当 requestDisallowInterceptTouchEvent 如果为true的时候 表示:父view 不拦截子view的touch 事件
*
* 这个方法只是改变flag
*
* @author baozi
*
*/
public class DecoratorViewPager extends ViewPager {
private ViewGroup parent;
public DecoratorViewPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public DecoratorViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setNestedpParent(ViewGroup parent) {
this.parent = parent;
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (parent != null) {
parent.requestDisallowInterceptTouchEvent(true);
}
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
if (parent != null) {
parent.requestDisallowInterceptTouchEvent(true);
}
return super.onInterceptTouchEvent(arg0);
}
@Override
public boolean onTouchEvent(MotionEvent arg0) {
if (parent != null) {
parent.requestDisallowInterceptTouchEvent(true);
}
return super.onTouchEvent(arg0);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询