在WebView Android上缩放与画布的同步
在WebView上绘制画布有一个问题:缩放。我正在使用GestureListener获取比例因子,并使用在WebView Android上缩放与画布的同步,android,android-webview,android-canvas,Android,Android Webview,Android Canvas,在WebView上绘制画布有一个问题:缩放。我正在使用GestureListener获取比例因子,并使用canvas.scale()相应地调整画布。这似乎适用于温和、简单的从捏到缩放。然而,偶尔,如果我试图快速地捏住或将一个手指放在下面并用另一个手指绕着它旋转,WebView和画布的缩放量并不相等(不好) 两种可能的解决方案: 1) 有没有办法检测网络视图的放大程度?或者以某种方式计算,然后将该比例设置为画布。 2) 以编程方式设置WebView的缩放级别。有什么建议吗 我尝试过几种方法,但在缩
canvas.scale()
相应地调整画布。这似乎适用于温和、简单的从捏到缩放。然而,偶尔,如果我试图快速地捏住或将一个手指放在下面并用另一个手指绕着它旋转,WebView和画布的缩放量并不相等(不好)
两种可能的解决方案:
1) 有没有办法检测网络视图的放大程度?或者以某种方式计算,然后将该比例设置为画布。
2) 以编程方式设置WebView的缩放级别。有什么建议吗
我尝试过几种方法,但在缩放时,画布和WebView似乎无法很好地同步。WebViewClient的onScaleChanged
仅检测双击,而不检测收缩缩放。以下是我的onDraw和手势听众:
@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;
}
从onDraw调用该方法应该满足您的需要。它已被标记为已弃用,但如果onScrollChanged不适用于您,则我认为您没有其他选择。我将尝试此方法。否则,我可能不得不放弃WebView并使用ScrollView或某种可缩放的ImageView如果我将WebView中的图像转换为位图并将其用作画布的位图会怎么样?这会保留webView控件吗?@ono-这会有助于了解您在做什么。如果你只想显示一幅图像,那为什么要对画布大惊小怪呢?我也想在图像上画画
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setSupportZoom(true);
webSettings.setDisplayZoomControls(false);
webSettings.setJavaScriptEnabled(true);