带滚动限制的 WebView 缩放

WebView zooming with scroll limiting

我想要实现的基本想法是能够放大 WebView 中的内容,但限制滚动,以便内容在缩放时不会在顶部和底部显示一些填充英寸。我知道相关填充的高度。

我目前扩展了 WebView class,并覆盖了 onScrollChanged 这样我就可以获得有关何时滚动以及滚动多远的信息。这一切都很简单,而且工作正常(即我得到了我需要的信息)。

当试图限制滚动本身时,问题就来了。我可以正确地限制它,使顶部填充永远不可见,但由于某种原因我无法理解底部只是不会正确限制。

这是我目前在 onScrollChanged:

中的代码
@Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        float totalPadding = 250 * scaleFactor;
        float padding = totalPadding / 2;

        float paddingTopStart = padding;
        float paddingBottomStart = (contentHeight * scaleFactor) + paddingTopStart;

        if (t > paddingBottomStart) {
            setScrollY((int) paddingBottomStart);
        } else if (t < paddingTopStart) {
            setScrollY((int) paddingTopStart);
        }
    }

比例因子在onScaleChanged中获取,保存为class变量。 totalPadding 是填充的总量(顶部填充+底部填充)。两边的填充相等,因此 padding = totalPadding / 2.

paddingBottomStart 是我认为的问题所在。我确信所涉及的数学是正确的,但它仍然不起作用。如果有人有任何建议,我们将非常欢迎。

原来我的计算结果不正确的原因是因为值 t 实际上是屏幕顶部的滚动值。因此我在计算时需要考虑到这一点!