我正在构建一个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;
}

10-08 11:32