2014-07-11 106 views
0

我正在研究android上的应用程序,该应用程序模拟使用顶部滚动视图,内容和底部滚动视图滚动视差。如何在不阻止滚动的情况下禁用滚动视图滚动

我想滚动只使用中间的滚动视图,但我能够独立滚动顶部视图手动。这我想阻止。

我试过这个从另一个相关的问题,但这似乎禁用滚动在这种情况下..我想是触摸到第二层和处理滚动。

.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { return true; } });

这是一个呼吁onInterceptTouchEvent?我仍然试图理解这一点。 让我知道这是不是足够的信息,或者如果它不清楚。

tl; dr - 我希望我的滚动视图完全被动触摸智能,就好像它不存在一样,并将触摸传递给较低层。

回答

0

我的解决办法是通过@Parvaz巴斯卡尔的解决方案的启发,但简单了很多......的确如此简单,我很惊讶,当我想到我的问题没有发生在我身上。

要通过触摸下面的层...我只是通过将触摸层以下

grassView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      mViewPager.onTouchEvent(motionEvent); //Scroll the view pager so that scrolling works through the grass. 
      return true; // NO SCROLLING FOR YOU! http://stackoverflow.com/a/10481239/1520364 
     } 
}); 

在我来说,我的顶端有一个层,它是这里的grassView和寻呼机查看下面有我需要滚动的实际标签。所以我吞草地上水平的触感,并把它传递给我的ViewPager

+0

好吧,我想你有两个滚动的意见,并希望移动两个滚动的意见,但有视差效果。无论如何高兴知道我帮助! –

+0

@ParvazBhaskar是的,视差已经实现了,我在顶部添加了一个图层,所以我的担心是将它传递给中间层,然后实现视差 –

1

这只是一个想法,我没有测试过,但我认为下面的步骤应该工作:

1.On您的顶部滚动视图,拦截onTouch事件(显示器尤其是ACTION_MOVE事件);

2.获取您实际想要移动的滚动视图的句柄。并使用ScrollView.smoothScrollto(int x,int y)函数以编程方式移动该scrollView。通过您在此motionEvent中收到的getX()和getY()值,从而允许您将触摸传递给较低层。

为了清楚起见,请参阅android文档smoothScrollto

3.显然,作为最后一个注意事项,您应该吞下scrollView的触摸,以便以编程方式移动。这将避免较低的scrollView自行移动onTouch。

既然您说过要实现视差,您可以将步骤#2中收到的x和y值乘以某个因子,从而创建视差效果。

您可以轻松找到SO上的步骤的代码片段。祝你好运!

编辑:指this链接,如果你想获得onScroll事件最上面滚动视图滚动时。

相关问题