0

我将自定义 WebView 放入自定义 ViewPager: https ://github.com/JakeWharton/Android-DirectionalViewPager

我已将 ViewPager 设置为垂直方向的页面,这与我的 WebView 滚动的方向相同,但 ViewPager 会拦截所有触摸事件。

所以它应该如何工作是 WebView 滚动直到它到达末尾,然后一旦它在滚动结束时,应该允许 ViewPager 分页到下一页。

我想,在 ViewPager 中,我需要找出当触摸事件发生时,可能响应事件的子视图列表,看看它们是否可滚动并适当地响应。

如果 ViewPager 忽略了触摸事件,我如何才能找出将接收触摸事件的潜在子视图列表?

4

1 回答 1

-1

从 Android 的 ViewPager 中获得启示。

/**
 * Tests scrollability within child views of v given a delta of dx.
 *
 * @param v View to test for horizontal scrollability
 * @param checkV Whether the view v passed should itself be checked for scrollability (true),
 *               or just its children (false).
 * @param dx Delta scrolled in pixels
 * @param x X coordinate of the active touch point
 * @param y Y coordinate of the active touch point
 * @return true if child views of v can be scrolled by delta of dx.
 */
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
    if (v instanceof ViewGroup) {
        final ViewGroup group = (ViewGroup) v;
        final int scrollX = v.getScrollX();
        final int scrollY = v.getScrollY();
        final int count = group.getChildCount();
        // Count backwards - let topmost views consume scroll distance first.
        for (int i = count - 1; i >= 0; i--) {
            // TODO: Add versioned support here for transformed views.
            // This will not work for transformed views in Honeycomb+
            final View child = group.getChildAt(i);
            if (x + scrollX >= child.getLeft() && x + scrollX < child.getRight() &&
                    y + scrollY >= child.getTop() && y + scrollY < child.getBottom() &&
                    canScroll(child, true, dx, x + scrollX - child.getLeft(),
                            y + scrollY - child.getTop())) {
                return true;
            }
        }
    }

    return checkV && ViewCompat.canScrollHorizontally(v, -dx);
}

它实际上遍历整个视图层次结构并进行命中测试以查看触摸是否位于视图边界内,如果是,则检查该视图是否可以滚动。

于 2013-10-08T21:30:53.670 回答