我正在研究android上的应用程序,它使用顶部滚动视图,内容和底部滚动视图模拟视差滚动。
我想仅使用中间滚动视图滚动,但我可以手动独立滚动顶视图。我想阻止这一点。
我从另一个相关的问题尝试了这个,但这似乎在这种情况下禁用滚动..我想要的是触摸落到第二层并为此处理滚动。
.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return true;
}
});
这是onInterceptTouchEvent
的电话吗?我仍在努力理解这一点。
如果这些信息不充分或者不清楚,请告诉我。
tl; dr - 我希望我的滚动视图完全被动接触,就像它不存在一样,并将触摸传递给较低层。
答案 0 :(得分:1)
这只是一个想法,我没有测试过,但我认为以下步骤应该有效:
1.在您的顶部scrollView上,拦截onTouch事件(监视器尤其是ACTION_MOVE事件);
2.拿一个你想要移动的滚动视图的句柄。并使用ScrollView.smoothScrollto(int x,int y)函数以编程方式移动该scrollView.Pass在此motionEvent中收到的getX()和getY()值,从而允许您将触摸传递给较低层。
为了清楚起见,请参阅smoothScrollto的android文档。
3.显然,作为最后一个注意事项,你应该吞下你将以编程方式移动的下部scrollView上的触摸。这将避免下部scrollView在其自己的onTouch上移动。
由于您说要实现视差,您可以将步骤#2中收到的x和y值乘以某个因子,从而产生视差效果。
您可以在SO上轻松找到上述步骤的代码段。祝你好运!
编辑:如果您想在最上面的scrollView滚动时获取onScroll事件,请参阅this链接。
答案 1 :(得分:0)
我的解决方案受到@Parvaz Bhaskar解决方案的启发,但更简单......确实如此简单以至于当我想到我的问题时,我并没有感到惊讶
要将触摸传递到下面的图层......我只是将触摸传递到下面的图层
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