ScaleGestureDetector を使用して Android アプリをズームするキャンバスがあります。これが私がこれまでに持っているコードです:
//SCALING --------------------------------------------------
//get center of the viewport
int centerX = xLoc+((int)(screenWidth/2*scaleFactor));
int centerY = yLoc+((int)(screenHeight/2*scaleFactor));
scaleFactor /= detector.getScaleFactor();
// Don't let the object get too small or too large.
scaleFactor = Math.max(1.0f, Math.min(scaleFactor, maxScaleFactor));
//Make sure the viewport is repositioned
xLoc = centerX-((int)(screenWidth/2*scaleFactor));
yLoc = centerY-((int)(screenHeight/2*scaleFactor));
//-----------------------------------------------------------
これは、キャンバスをズームインおよびズームアウトするのに最適です。xLoc と yLoc は、一部を描画している画像全体に対するビューポートの左上隅を表します。ただし、このコードの問題は、ビューポートの中心にズームインすることです。Androidブラウザーでピンチしてズームするのと同じように、detector.getFocuxX()とdetector.getFocuxY()を使用してフォーカスポイントにズームインできるようにしたいと思います。
基本的に、ビューポート (xLoc と yLoc) の位置を調整して、スケール ジェスチャのフォーカス ポイントにズームインしたように見えるようにする必要があります。
この部分が解りません。キャンバス マトリックス変換 (これを投稿する前に見つけた多くのトピックで使用されているのを見てきました) を使用せずにこれを行う方法について誰かが考えている場合は、本当に感謝しています! 似たようなことをした他の誰かを私に指摘できたとしても.