我正在构建一个Android Wear应用程序,我希望将其显示为可以在水平方向上滑动的几页。
为此,我使用了GridViewPager和关联的FragmentGridPagerAdapter,后者硬连线为使用单行。这对于在图块之间水平滑动很有效,但是在我的片段之一中,我想使用WearableListView来允许用户在多个 Action 之间进行选择。不幸的是,这不起作用,因为GridViewPager似乎阻止了任何滑动到达WearableListView。有谁知道使用所描述的组件可以做到这一点吗?
我也尝试过使用标准的ViewPager,这使WearableListView可以很好地滚动,但是水平滑动会变成flakey,并且您经常需要滑动几次才能移动 View 分页器。
最佳答案
我遇到了同样的事情。仅仅设置一行或覆盖canscrollvertically()是行不通的。我发现的唯一选择是覆盖触摸事件,例如Neevek的答案:
HorizontalScrollView within ScrollView Touch Handling
这为我工作:
private float xDistance, yDistance, lastX, lastY;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
setDownPosition(ev);
break;
case MotionEvent.ACTION_MOVE:
if (isVerticalScroll(ev))
return false;
}
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
setDownPosition(ev);
break;
case MotionEvent.ACTION_MOVE:
if (isVerticalScroll(ev))
return false;
}
return super.onTouchEvent(ev);
}
private void setDownPosition(MotionEvent ev){
xDistance = yDistance = 0f;
lastX = ev.getX();
lastY = ev.getY();
}
private boolean isVerticalScroll(MotionEvent ev){
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 true;
}
return false;
}