Определить нарисованный Rect от Canvas (Определить положение OverlayItem)

Я пытаюсь просто нарисовать видимые OverlayItems, поэтому я определяю видимый прямоугольник карты, но я не могу определить Rect, где Canvas будет рисовать OverlayItem.

Это то, что я делал до сих пор (метод в подробном наложении).. но getClipBounds() не возвращает правильный Rect

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

Я не хочу рисовать другие OverlayItems, я хочу знать, рисует ли мой холст что-то в пределах видимых прямоугольников вида карты, потому что, если нет, я не рисую этот холст. Это делается для ускорения просмотра карты, который имеет почти 2000 наложений. Предметы


person lukaswelte    schedule 22.08.2012    source источник
comment
вопрос не понятен. Вы подробно объяснили?   -  person saravanan    schedule 22.08.2012


Ответы (2)


Если вы хотите рисовать наложения, подобные этим:

Итак, в основном вам нужно наложить customImage на фоновое поле с помощью холста. Используя эту реализацию, вы можете эффективно создать BitmapDrawable из холста, который затем можно назначить в качестве маркера для вашего «ItemizedOverlay». Если это тот тип детализированных наложений, который вы искали, то нет необходимости переопределять функцию рисования класса детализированного наложения. Все, что вам нужно сделать, это использовать следующий код для создания BitmapDrawable, который вы можете назначить своему ItemizedOverlay в его конструкторе. Вот функция для этого:

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);

}
person Vishwa Patel    schedule 22.08.2012
comment
У меня есть OverlayItems, я рисую то, что я не знаю, рисует ли этот холст элемент наложения в пределах видимого прямоугольника представления карты или нет… потому что, если нет, я не буду рисовать элемент наложения, чтобы улучшить скорость просмотра карты - person lukaswelte; 22.08.2012
comment
Это кажется сложным определить просто на основе холста, потому что холст не имеет собственной географической привязки, тогда как наложения, содержащиеся в детализированных наложениях, имеют свои собственные геоточки. Поэтому мне интересно, используете ли вы Itemized Overlay в качестве контейнера для нескольких наложений или вы используете разные детализированные объекты для каждого из ваших наложений? - person Vishwa Patel; 22.08.2012
comment
Itemized Overlay содержит несколько элементов OverlayItem, но существует более одного Itemized Overlay… Так что лучше/проще сделать это в Draw of OverlayItem? Если да, как я могу получить нарисованный прямоугольник? - person lukaswelte; 22.08.2012

Теперь я сделал это, перебирая элементы и проверяя, находятся ли они на карте или нет. Вот так:

@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);
            }
        }       
    } 
person lukaswelte    schedule 06.09.2012