0

アンドロイドの質問です。カスタム ImageView クラスを作成しました。その中には、特定のピクセルに (キャンバスを使用して) 円を描画する onDraw メソッドがあります。このカスタム イメージビューを使用してイメージを開くと、描画した円にフォーカスを設定したいと思います (たとえば、Google マップが現在の場所で行うように。フォーカスは現在のポイントに設定されます)。

4

1 に答える 1

0

マップサーバーがGoogleで行うことは、中央が適切に表示されるようにカスタマイズされたタイルのセットを提供することです。新しいバージョンはもちろんベクターベースであるため、ビューを描画するだけで、目的の場所の中央に配置されます。

アプリケーションの詳細を知らなくても、おそらく必要です

独自のコンテナクラス、おそらくFrameLayoutを作成します

public class myMapFrameLayout extends FrameLayout {

タイルを適切にレイアウトできるように、onDrawまたはonDispatchDrawのいずれかをオーバーライドします

必要なx、yが画面の中央になるようにビットマップを描画する場所を見つけ、タイルの移動方法に応じて必要な座標で空白を埋める必要がある他のタイルを描画します中央に配置する

同じサイズのタイルが周囲にある実際の画面よりも大きい仮想画面を考えてみてください

1 2 3

4 X 5

6 7 8

Xがディスプレイのサイズであり、現在のタイルを表すと仮定すると、タイルを移動する方法と、入力する必要がある他のタイル1、2、3、4、5、6、7、または8を把握する必要があります。移動による空きスペース

タイル+xを0,0から描画する必要がある場合は、タイル4の一部が必要です。+ yを0,0から描画することは、2の一部を意味し、両方とも1,2,4がすべて必要であることを意味します。したがって、組み合わせて必要なタイルをロードし、それぞれの描画位置を把握します。これにより、中央が表示された新しい仮想タイルが作成されます。

これは、クライアント側のビットマップ描画方法で私が考えるのと同じくらい効率的です。

アップデート

コメントは非常に大きな画像が1つしかないことを示しているので、x、yがディスプレイのサイズよりも端に近いものとして必要な場合、これは少し問題になります。

それでも、必要な場所に画像を描画できます。画面を測定し、ターゲットx、yを中央に配置してビットマップを描画するだけです。

したがって、画面が500x500で、画像が5000x5000で、中心がx = 1000 y = 1000の位置にある場合、

drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)

ここで、ソースの長方形は1000-250,1000-250,500,500になり、dstの長方形は0,0,500,500になります。

250はディスプレイの中心xと中心y、1000はターゲットのx / y座標、500はディスプレイのサイズです。

繰り返しますが、エッジにあるターゲットでは、無限のマップタイルがないため、画面に空白のポリゴンが表示されます。

または、layoutparamsを使用してフレームレイアウトのサイズを大きくし、xとyのキャンバスを変換して、キャンバスをx、yの中央に配置することもできます。同様の計算を使用する必要がありますが、パフォーマンスは高くなりますが、実際にはわかりません。

画像が本当に大きい場合は、大量のメモリを使用することに注意してください

于 2011-07-13T14:27:43.357 に答える