2012-04-23 10 views
0

ホットスポットが10インチタブレットで動作するようにマップされているサイズ1024x768の画像がありますが、火災でアプリケーションを実行すると画像サイズが小さくなり、ホットスポットが機能しません。マーケットプレイスにマップされる小さな画像上の座標をマッピングするには?Android ImageViewホットスポットマッピング

答えて

1

をあなたが正確な答えを提供するのに十分な詳細を与えることはありません。

  1. をあなたは?ImageViewの画像を表示するために使用しているか?
  2. アスペクト比を維持するために画像が拡大/縮小されていますか?
  3. タッチリスナーでXとYを取得していますか?
  4. ホットスポットは、接触したX、Yとホットスポットの定義を比較するヒットテスターで実装されていますか?

イメージビューとタッチリスナーがXとYを取得すると仮定すると、ホットスポットをイメージの表示解像度に合わせてスケーリングする必要があります。私は最近、ImageViewクラスを拡張し、onMeasure()コールバックをオーバーライドすることでこれを行いました。 onMeasureでは、画像が横長か縦長かを判断し、画像のネイティブサイズ(ホットスポットを指定したサイズ)と表示サイズの間の倍率を計算します。このような

何か:

if (this.getWidth() > this.getHeight()) { 
    scaleFactor = ((float)this.getWidth()/(float)this.originalBitmapWidth); 
} else { 
    scaleFactor = ((float)this.getHeight()/(float)this.originalBitmapHeight); 
} 

for (Hotspot hotspot : hotspots){ 
    hotspot.setScale(scaleFactor); 
} 
+0

1.私は画像を表示するIm​​ageViewのを使用しています。 – Nick

+0

OK。あなたのアプリは512x384の解像度のデバイスで動作しているとします。あなたの画像は、それが元の解像度の半分で表示されます(フルスクリーンを想定しています)。したがって、100,100のヒットスポットは50,50にスケーリングする必要があります。幅が高さより大きい場合、縮尺係数は幅(onMeasureで測定)を元の幅= 512/1204 = 0.5で割って表示されます。あなたのホットスポットを100,100で0.5倍にスケールして50,50を得る。良い解決策は、ビットマップのネイティブサイズを想定するのではなく完全に再利用できるように測定し、ハードコード1024x768を測定することです。 – Simon