Android - получить координаты X и Y динамически отрисовываемых растровых изображений

Я делаю приложение для Android с OpenStreetMaps (используя osmdroid). На этой карте показаны маркеры (долгота/широта и другие данные для этих маркеров извлекаются из файла json). Эти маркеры являются OverlayItems и все правильно отображаются в MapView. Координаты X и Y для этих растровых изображений вычисляются путем получения проекции карты, а затем из X и Y геоточки в сочетании с растровыми изображениями width/2 и height/2 растровое изображение рисуется в его правильном месте на карте мира.

Короче говоря: значения X и Y для растровых изображений вычисляются динамически. Мой вопрос: я пишу код, который должен происходить, когда пользователь щелкнул (= сделал событие касания) на растровом изображении маркера. Для этого мне нужно проверить, находятся ли X и Y события в пределах растрового изображения. Как я могу это сделать?

К сожалению, простых файлов bitmap.getX или .getY не существует, что мне и нужно.

Это код для рисования растровых изображений (происходит в @Override draw()), если он может быть полезен:

for(OverlayItem p: waypointMarkers){
                IGeoPoint in = p.getPoint();
                Point out = new Point();
                mapview.getProjection().toPixels(in, out);

                Bitmap bm = BitmapFactory.decodeResource(getResources(),
                        R.drawable.marker);

                bitmaps.put(bm, p);

                canvas.drawBitmap(bm,
                        out.x - bm.getWidth()/2,    //shift the bitmap center
                        out.y - bm.getHeight()/2,   //shift the bitmap center
                        null);

            }

bitmaps.put(bm, p); — это HashMap с парой Bitmap, OverlayItem. Позже в моем коде я перебираю ключи этого HashMap, и там я хочу проверить X и Y растрового изображения.

for(Bitmap b: bitmaps.keySet()){
            if (x >= xOfBitmap && x < (xOfBitmap + yourBitmap.getWidth())
                    && y >= yOfBitmap && y < (yOfBitmap + yourBitmap.getHeight())) {
                //found this on StackOverflow, if this is true than user has clicked somewhere on the bitmap
            }

Заранее спасибо.


person Fluppe    schedule 17.02.2015    source источник
comment
a HashMap with Bitmap, OverlayItem pair.. Разве вы не можете снова вычислить x, y из OverlayItem? Как и раньше.   -  person greenapps    schedule 17.02.2015
comment
К сожалению, нет, в настоящее время OverlayItems не связаны с растровыми изображениями. OverlayItems содержат исключительно строковые значения с именами и т. д., а также геоточку для глобального местоположения. В настоящее время я пытаюсь использовать класс, содержащий int X, int Y и Bitmap, который создается до рисования растрового изображения, поэтому эти объекты должны содержать X и Y. Но пока не повезло, думаю, что у него есть что-то. сделать с преобразованием int/float (одна цифра после запятой, измененная на карте мира, сразу же означает совершенно другое место)   -  person Fluppe    schedule 17.02.2015
comment
Извиняюсь. Я не понимаю, почему вы не можете снова вычислить x, y. Но если нет, то используйте что-то вроде bitmaps.put(bm, p, out.x, out.y); Кстати, зачем вам нужно преобразование int/float?   -  person greenapps    schedule 17.02.2015


Ответы (1)


Вы можете посмотреть Маркер OSMBonusPack.

Поскольку он реализует обнаружение событий касания, просмотр его исходного кода (метод hitTest) даст вам рабочий пример.

И, возможно, вы можете просто использовать его, если он соответствует вашим потребностям.

person MKer    schedule 17.02.2015