Я делаю 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
}
Спасибо заранее.
'a HashMap с растровым изображением, OverlayItem pair.'. Не можете ли вы рассчитать x, y снова из OverlayItem? Как и раньше. – greenapps
К сожалению нет, OverlayItems в настоящее время не имеют ссылки на растровые изображения. Элементы OverlayItems содержат только строковые значения с именами и т. Д. И геометку для глобального местоположения. В настоящее время я пытаюсь использовать класс, содержащий int X, int Y и Bitmap, который создается до рисования растрового изображения, поэтому эти объекты должны содержать X и Y. Но пока не повезло, подумайте это имеет какое-то отношение к преобразованию int/float (одна цифра после изменения запятой на карте мира сразу же является совершенно другим местом) – Fluppe
Извините. Я не понимаю, почему вы не можете вычислить x, y снова. Но если нет, то используйте что-то вроде bitmaps.put (bm, p, out.x, out.y); Зачем вам, кстати, нужно преобразование int/float? – greenapps