私はいくつかの地理クイズゲームに取り組んでいます。
ユーザーは、マップ上で定義されたものを見つける必要があります。
画像のサイズに対する X と Y の位置を計算するマップ ポイント ジェネレーターを作成しました。したがって、地図上の場所の X と Y は次のように表されます。 float * imageWidth = X float * imageHeight = Y;
ユーザーが画像ビューにタッチすると、正しい位置があったマップに描画する必要があります。
画像ビューのスケール タイプが "FitXY" として定義されている場合、コードはそれらの相対座標と画像の境界のサイズを使用して位置を計算し、正常に動作しますが、マップが引き伸ばされて見栄えがよくありません。
"centerInside" 縮尺タイプを使用すると...地図画像はきれいに見えますが、正しい位置の座標が正しい場所を指していません。
これらの座標を、画面に描かれた実際の画像に対応するように変換するにはどうすればよいですか?
また、画像ビューではなくビットマップのタッチ座標が必要です...正しい場所とタッチされた場所の間の距離を計算できます。
ImageView内の画面に描画されたビットマップのキャンバスを取得するには?
これは私にとって少し混乱しています...
何か案が?
Tnx?
編集:
これまでの私のコードは次のとおりです。
Drawable drawable = stageImage.getDrawable(); Rect imageBounds = drawable.getBounds();
// height and width of the visible (scaled) image
int scaledHeight = imageBounds.height();
int scaledWidth = imageBounds.width();
Matrix inverse = new Matrix();
stageImage.getImageMatrix().invert(inverse);
// map touch point from ImageView to image
float[] touchPoint = new float[] { event.getX(),
event.getY() };
inverse.mapPoints(touchPoint);
// Relative touch points
float relativeX = touchPoint[0] / scaledWidth;
float relativeY = touchPoint[1] / scaledHeight;
// Prevent errors
if (relativeX < 0) {
relativeX = 0;
}
if (relativeX > 1) {
relativeX = 1;
}
if (relativeY < 0) {
relativeY = 0;
}
if (relativeY > 1) {
relativeY = 1;
}
touchX = event.getX();
touchY = event.getY();
//THIS WORKS FINE!!!!!
// Draw touched point
stageImage.drawTouchedSpot(touchX, touchY);
// Get correct relative position and draw it
double correctRelativeX = gameHandler
.getCurrentMapElement().getxCoordinate()
* imageBounds.width();
double correctRelativeY = gameHandler
.getCurrentMapElement().getyCoordinate()
* imageBounds.height();
//THIS IS NOT RIGHT WHEN STAGE IMAGE SCALE TYPE IS "CENTER INSIDE"
stageImage.drawFlag(correctRelativeX, correctRelativeY);