これは、stackoverflow に関する初めての質問ですので、お手柔らかにお願いします。
背景を少し説明しましょう。
ビュー内でビットマップを操作するアプリケーション (この場合の画像は施設のマップ) を作成し、ビットマップ上のポイントの実際の x 座標と y 座標を使用してマップ上にポイントを配置しました。ジェスチャによる画像配置の変更に基づいてこのオフセット値を変更することにより、画面の左上隅に対するビットマップの左上隅のオフセットを追跡します。これは実際にパン操作に非常にうまく機能しており、(長押しジェスチャからの) 画面座標をビットマップ上の実際の座標に簡単に変換できます。これにより、マップ上に円を描画し、ユーザーがデータベースにプッシュする「関心のあるポイント」を作成できるようにします。
ズームを扱うときに問題が発生します。
canvas.scale(scalefastor ,scalefactor);
onDrawでシンプルにズームしています。このズームでは、実際のスケーリングは画像の左上隅に相対的であるため、ズームインしようとしている実際の場所が画面外にすばやく移動するため、ズームするピンチは直感的ではありません. ただし、この方法で画像をスケーリングしても、画像の実際のオフセットには影響しないため、ポイントの配置は依然として正確です。これを達成するために、次の簡単な計算を使用します。
bitmapXCoordinate = (event.getX() - xOffset) /scaleFactor;
使いたい
canvas.scale(scalefactor, scalefactor, gestureFocusX, gestureFocusY);
ズームをユーザーにとって直感的に保つために、これはビットマップの実際のマトリックスを変換するため、ポイントの配置は機能しなくなります。ビットマップ上のポイントは、何らかの形でスケールの焦点に相対的であり、配置されたすべてのポイントがずれており、この焦点に向かっているようです。ポイントを正しく配置するには、マトリックス上でこの変換を考慮する必要があることは承知していますが、明らかに、それには私よりも知的な個人が必要です。解決策はおそらく簡単ですが、私はこれに何日も取り組んできましたこの新しいオフセットを説明しようとしていますが、実際の進歩はありません。これに対する解決策についての洞察は大歓迎です。