|
在滑动ViewPager进行切换时,必须完全保持水平的滑动。如若进行滑动的时候滑动方向发生了倾斜,就会触发ScrollView的滚动事件,而ViewPager的滑动也会终止并变回原来的样子。 怎样才能让在ViewPager进行滑动时ScrollView不滚动。 试过重写ScrollView的onTouchEvent,但是没有效果。 |
|
![]() 40分 |
这个问题我也遇到了,没找到好的办法,最后我把ScrollView删了,如果一定要保留的话建议用GroupView实现
|
![]() |
已经自己实现了,需要重写ScrollView,下面是代码
package com.zp365.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;
/**
* 解决ScrollView嵌套ViewPager出现的滑动冲突问题
*/
public class ScrollView1 extends ScrollView {
private boolean canScroll;
private GestureDetector mGestureDetector;
View.OnTouchListener mGestureListener;
public ScrollView1(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(new YScrollDetector());
canScroll = true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_UP)
canScroll = true;
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}
class YScrollDetector extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if(canScroll)
if (Math.abs(distanceY) >= Math.abs(distanceX))
canScroll = true;
else
canScroll = false;
return canScroll;
}
}
}
用这个自定义的ScrollView代替原来的ScrollView就行 |
![]() |
大神请问怎么调用自定义的scroll呢?之前不是直接在xml定义,现在需要怎么调用呢?
|
![]() |
大神真给力,相当好使!
|
![]() |
顶大神
|
![]() |
顶大神!
|
![]() |
如是tgyhrfuj741 所说,虽然能实现,但是 scrollview的左右滑动就不有用了,我现在的问题是主视图里有一个横向滑动的scrollview 子视图中有一个上下滑动的scrollview ,在子视图中嵌入viewpager,但是viewpager的左右滑动事件与最外面的scrollview的左右滑动事件 有冲突,请问怎么解决
|
![]() |
在scrollview中放一个viewpager,然后在viewpager里面放listview,展示不出数据是怎么回事啊,求大神指教。
|
![]() |
这样方法在哪里调用,求大神指教
|
![]() |
++++++++ 不错哦。。。
|
![]() |
用2#的办法 解决问题 谢谢!
|
![]() |
为什么要private boolean canScroll;这个东西啊?
这段代码存在问题: |
![]() |
不错,用2楼的方法解决了问题!顶一个,我的是在ScrollView里面嵌入ViewPager,当ViewPager左右滑动的时候,如果滑偏ScrollView会上下滑动。用了2楼的方法之后,ViewPager左右滑动的时候滑动方向发生了倾斜,ScrollView的滚动事件不会触发。大神,顶顶顶顶顶顶顶顶顶顶顶!!
|
![]() |
非常不错,用2楼的方法解决了,3Q
|
![]() |
大神怎么调用scrollview1啊,我调用报错:自定义scrollview1不能强制转换为Scrollview
|
![]() |
顶!必须顶!
|
![]() |
各位大哥,能发一个demo吗? 我试过了自定义ScrollView还是不行。
|
![]() |
多谢楼主!我在一个 ScrollView 里嵌入了一个 ViewPager,使用楼主的方法重写了 ViewPager,让它只能横向滚动不能纵向滚动。
|
![]() |
多谢,重写了scrollview和viewpager就好了
|
![]() |
大神NB。。。
|
![]() |
楼主重写的scrollview是有问题的,会经常出现scrollview无法滑动的问题,完全不能用,下面提供一个可以网上查找可以正常使用的自定义scrollview代码:
public class CustomScrollView extends ScrollView { private float xDistance, yDistance, xLast, yLast; public CustomScrollView(Context context) { public CustomScrollView(Context context, AttributeSet attrs) { public CustomScrollView(Context context, AttributeSet attrs, int defStyle) { @Override xDistance += Math.abs(curX – xLast); if (xDistance > yDistance) { return super.onInterceptTouchEvent(ev); |
![]() |
顶一个先!!!
|
![]() |
膜拜大神。。。Orz…帮助我我解决了困扰多年的便秘
|
![]() |
NB 顶一个 好东西应该让大家都看到
|
![]() |
顶! 真有用!
|
![]() |
确实,楼主的解决办法有些缺陷,应该这样复写ScrollView
package com.moretv.activity.newActivity.special;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;
public class MyScrollView extends ScrollView {
private float xDistance, yDistance, xLast, yLast;
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context,AttributeSet attrs){
super(context, attrs);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xLast = ev.getX();
yLast = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();
xDistance += Math.abs(curX - xLast);
yDistance += Math.abs(curY - yLast);
xLast = curX;
yLast = curY;
if (xDistance > yDistance) {
return false;
}
}
return super.onInterceptTouchEvent(ev);
}
}
|

