2013-07-25 68 views
13

有没有办法在滚动ViewPager的项目时锁定ListView的垂直滚动?或者也许改变ViewPager的水平滚动灵敏度?禁用ListView滑动时滑动ViewPager

谢谢。

最后的编辑

这是我更新的解决方案。感谢您的回复Masoud Dadashi,您的意见终于让我想出了解决方案。

这里是我的自定义的ListView类:

public class FolderListView extends ListView { 

    private float xDistance, yDistance, lastX, lastY; 

    // If built programmatically 
    public FolderListView(Context context) { 
     super(context); 
     // init(); 
    } 

    // This example uses this method since being built from XML 
    public FolderListView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // init(); 
    } 

    // Build from XML layout 
    public FolderListView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     // init(); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 

     switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      xDistance = yDistance = 0f; 
      lastX = ev.getX(); 
      lastY = ev.getY(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      final float curX = ev.getX(); 
      final float curY = ev.getY(); 
      xDistance += Math.abs(curX - lastX); 
      yDistance += Math.abs(curY - lastY); 
      lastX = curX; 
      lastY = curY; 
      if (xDistance > yDistance) 
       return false; 
     } 

     return super.onInterceptTouchEvent(ev); 

    } 
} 
+0

看看这个帖子http://stackoverflow.com/questions/7900860/viewpager-in -a-listview-how-to-lock-the-rolling-axis –

+0

谢谢,我会研究一下。 –

回答

7

肯定是有的。创建另一个customListView类从ListView的延伸并覆盖其dispatchTouchEvent事件处理程序是这样的:

@Override 
public boolean dispatchTouchEvent(MotionEvent ev){ 
    if(ev.getAction()==MotionEvent.ACTION_MOVE) 
     return true; 
    return super.dispatchTouchEvent(ev); 
} 

然后用这个代替customListView

+0

我试过你的解决方案,请检查我的更新。 –

+1

我给你一个禁用滚动的例子,但显然我不够清楚。在该重写的方法中,如果它是SWIPE,则应检测手势并禁用滚动。因为代码在下面的地址中可用,所以我不复制它。看看这个地址:http://stackoverflow.com/questions/2646028/android-horizo​​ntalscrollview-within-scrollview-touch-handling –

+0

我已更新我的文章,我遵循你的指示,并最终设法实现所需的功能。非常感谢! –