2015-02-17 3 views
1

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

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

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

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

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 
      } 

Спасибо заранее.

+0

'a HashMap с растровым изображением, OverlayItem pair.'. Не можете ли вы рассчитать x, y снова из OverlayItem? Как и раньше. – greenapps

+0

К сожалению нет, OverlayItems в настоящее время не имеют ссылки на растровые изображения. Элементы OverlayItems содержат только строковые значения с именами и т. Д. И геометку для глобального местоположения. В настоящее время я пытаюсь использовать класс, содержащий int X, int Y и Bitmap, который создается до рисования растрового изображения, поэтому эти объекты должны содержать X и Y. Но пока не повезло, подумайте это имеет какое-то отношение к преобразованию int/float (одна цифра после изменения запятой на карте мира сразу же является совершенно другим местом) – Fluppe

+0

Извините. Я не понимаю, почему вы не можете вычислить x, y снова. Но если нет, то используйте что-то вроде bitmaps.put (bm, p, out.x, out.y); Зачем вам, кстати, нужно преобразование int/float? – greenapps

ответ

0

Вы можете взглянуть на OSMBonusPack Marker.

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

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

Смежные вопросы