0

表示されているOverlayItemを描画しようとしているので、マップをrectで表示できると判断しましたが、CanvasがOverlayItemを描画するRectを特定できません。

これまで私が行ったことです(項目別オーバーレイのメソッド)。しかし、getClipBounds()は正しいRectを返しません。

@Override
    public void draw(Canvas canvas, MapView map, boolean shadow) {
        if (getMapBounds().intersect(canvas.getClipBounds())) {
            super.draw(canvas, map, false);
        }
    }

他のOverlayItemsを描画したくない、キャンバスがマップビューの表示された範囲内に何かを描画するかどうかを知りたいアイテム

4

2 に答える 2

0

次のようなオーバーレイを描画する場合は、次のようにします。

したがって、基本的にあなたがしなければならないことは、キャンバスの助けを借りて背景ボックスにcustomImageを課すことです。この実装を使用すると、キャンバスからBitmapDrawableを効果的に作成し、それを「ItemizedOverlay」のマーカーとして割り当てることができます。これが探していたアイテム化されたオーバーレイのタイプである場合、アイテム化されたオーバーレイクラスの描画機能をオーバーライドする必要はありません。次のコードを使用して、コンストラクターでItemizedOverlayに割り当てることができるBitmapDrawableを作成するだけです。これを行う関数は次のとおりです。

public BitmapDrawable imageOnDrawable(int drawableBackground, Bitmap customImage)
{
//The following line is optional but I'd advise you to minimize the size of 
//the size of the bitmap (using a thumbnail) in order to improve draw
//performance of the overlays (especially if you are creating a lot of overlays).

Bitmap customImageThumbnail = ThumbnailUtils.extractThumbnail(
                                                customImage, 100, 100); 

Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId);
bm = Bitmap.createScaledBitmap(bm, 112, 120, false);

Canvas canvas = new Canvas(bm);
canvas.drawBitmap(bm, 0, 0, null);
// The 6,6 in the below line refer to the offset of the customImage/Thumbnail
// from the top-left corner of the background box (or whatever you want to use
// as your background) 
canvas.drawBitmap(customImageThumbnail, 6, 6, null); 

return new BitmapDrawable(bm);

}
于 2012-08-22T15:43:26.827 に答える
0

私は今、アイテムを繰り返して、それらがマップ上にあるかどうかをチェックすることによってこれを行いました:ちょうどこのように:

@Override
    public void draw(Canvas canvas, MapView map, boolean shadow) {
        for (int i = 0; i < mOverlays.size(); i++) {
            if (isLocationVisible(mOverlays.get(i).getPoint())) {
                super.draw(canvas, map, false);
            }
        }       
    } 
于 2012-09-06T13:58:48.837 に答える