0

カスタムViewPager内にカスタムWebViewを配置しています: 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 に答える