Вы можете нарисовать объект поверх своего растрового изображения и реализовать обратный вызов касания, который проверяет, действительно ли вы нажали на свой маркер. Вот простой пример:
<com.myproject.RedImageView
android:id="@+id/imageView"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_centerHorizontal="true"
android:layout_centerInParent="true"
android:layout_centerVertical="true"
android:background="@android:color/holo_red_dark" />
package com.myproject;
public class RedImageView extends View {
private Paint mPaint;
private Rect mRect;
public RedImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
//Draw a small white rectangle on top of our red ImageView
private void init() {
mPaint = new Paint();
mPaint.setColor(Color.WHITE);
mRect = new Rect(20, 20, 120, 120);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRect(mRect, mPaint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//Simple touch gesture has started
if (event.getAction() == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();
//Match touch coordinates vs "Point of Interest" aka small white rectangle
if (mRect.contains(x, y)) {
Snackbar.make(this, "Clicked white", Snackbar.LENGTH_SHORT).show();
}
}
return super.onTouchEvent(event);
}
}
Я бы не предложил модифицировать растровое изображение, чтобы сделать это. Создайте список объектов PointOfInterest и сохраните их местоположение. Затем нарисуйте их поверх изображения карты. Не нужно изменять растровое изображение, если вы не хотите, чтобы пользователь мог получить к нему доступ из другого приложения (например, из галереи изображений). – vedi0boy