1

WebView にキャンバスを実装していますが、WebView のズーム レベルに応じてキャンバスを拡大縮小する必要があります。aと組み合わせるcanvas.scale()SimpleOnScaleListenerうまくいきます。ダブルタップの場合、ダブルタップGestureDetectorがあったことを検出し、それに応じて倍率を設定する を使用しています。ダブルタップがあったときにどれだけ拡大縮小するかを推測しているだけです2.2f.7インチのタブレットでは拡大率を設定できますが、10インチには拡大しすぎます.

ダブルタップでWebViewがどれだけズームインしたかをプログラムで把握する方法はありますか? 基本的に、ズームを WebView と同期するにはキャンバスが必要です。

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.scale(mScaleFactor, mScaleFactor, 0, 0);
    canvas.drawPath(drawPath, drawPaint);
    invalidate();
}

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

        // Don't let the object get too small or too large.
        if(Deal.on == false) {
            mScaleFactor *= detector.getScaleFactor();
            mScaleFactor = Math.max(1f, Math.min(mScaleFactor, 30.0f));
            System.out.println("mScaleFactor: " + mScaleFactor);
        }
        invalidate();
        return true;
    }
}

public class DoubleTapListener extends GestureDetector.SimpleOnGestureListener {

    @Override
    public boolean onDoubleTap(MotionEvent e) {
       if (Deal.on == false) {
           if (mScaleFactor > 1.0f) {
               mScaleFactor = 1.0f;
           }else {
               mScaleFactor = 2.2f;
           }
       }
       return true;
    }

}
4

1 に答える 1

0

拡張することでズームの変化を捉えることができますWebViewClient

public MyWebView(Context context, AttributeSet attrs) {
    super(context, attrs);
    setWebViewClient(new WebViewClient() {
        @Override
        public void onScaleChanged(WebView view, float oldScale, float newScale) {
            super.onScaleChanged(view, oldScale, newScale);
            currentScale = newScale;
        }
    });
}
于 2013-11-07T15:04:06.370 に答える