0

我在 WebView 上做画布时遇到一个问题:缩放。我正在使用 GestureListener 来获取比例因子并相应地调整我的画布canvas.scale()。这似乎适用于温和、简单的捏合缩放。但是,有时,如果我尝试快速捏住手指或将一根手指向下并用另一根手指围绕它旋转,则 WebView 和 Canvas 不会缩放相等的量(不好)。

几个可能的解决方案:1)有没有办法检测 WebView 放大了多少?或者以某种方式计算它,然后将该比例设置到画布上。2) 以编程方式设置 WebView 的缩放级别。有什么建议么?

我已经尝试了几件事,但似乎没有什么能让画布和 WebView 在缩放时很好地同步。onScaleChangedWebViewClient 只检测双击,而不是捏缩放。这是我的 onDraw 和 GestureListener:

@Override
protected void onDraw(Canvas canvas) {
    canvas.save();
    super.onDraw(canvas);
    clipBounds = canvas.getClipBounds();
    drawPaint.setStrokeWidth(8/mScaleFactor);
    canvas.scale(mScaleFactor, mScaleFactor, 0, 0);
    for (int i = 0; i < colors.size(); i++) {
        canvas.drawPath(paths.get(i), colors.get(i));
    }
    canvas.drawPath(drawPath, drawPaint);
    canvas.drawBitmap(canvasBitmap, 0, 0, drawPaint);
    canvas.restore();
    invalidate();
}


public class ScaleGestureListener extends SimpleOnScaleGestureListener {                
    @Override
    public boolean onScale(ScaleGestureDetector detector) {

        if(Deal.on == false) {
            mScaleFactor *= detector.getScaleFactor();
            mScaleFactor = Math.max(1.0f, Math.min(mScaleFactor, 6.63f));
        }
        invalidate();
        return true;
    }

网页视图设置:

WebSettings webSettings = drawView.getSettings();

    webSettings.setLoadWithOverviewMode(true);
    webSettings.setUseWideViewPort(true);
    webSettings.setBuiltInZoomControls(true);
    webSettings.setSupportZoom(true);
    webSettings.setDisplayZoomControls(false);

    webSettings.setJavaScriptEnabled(true);
4

1 回答 1

0

从 onDraw调用getScale方法应该可以满足您的需要。它已被标记为已弃用,但如果 onScrollChanged 对您不起作用,那么我认为您没有其他选择。

于 2013-11-14T12:33:29.990 回答