На мой взгляд, идея фрактальвальдера неплоха для вашего дела. Основные шаги перечислены ниже.
- Подкласс Android
ImageView
. Например, MultiRegionImageView
.
- Переопределить его метод
onTouchEvent
. (Этот метод вызывается всякий раз, когда пользователь касается представления)
Пользователь обращается к изображению, и таким образом onTouchEvent
вызывается и обеспечивает точную точку касания (x, y).
Объявите другой способ или интерфейс, который определяет, в какой области находится данная точка. Например, getRegionByPoint(int x, int y)
Если вы хотите выделить эти границы региона, вы можете использовать пути. Во-первых, вы должны определить пути и сохранить их в необработанный файл (например, XML), затем использовать идентификатор региона, выбрать его путь и, наконец, нарисовать этот путь по основному изображению.
Для рисования пути поверх основного изображения, вы должны также переопределить onDraw
метод ImageView
класса и использовать canvas.drawPath();
public class MultiRegionImageView extends ImageView {
RegionProvider mRegionProvider;
int mId = -1;
private Paint mPaint;
public MultiRegionImageView(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mId = mRegionProvider.getRegionIdByPoint(event.getX(), event.getY());
return super.onTouchEvent(event);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(mId != -1) {
canvas.drawPath(mRegionProvider.getRegionBoundaryPath(mId), mPaint);
}
}
public interface RegionProvider{
int getRegionIdByPoint(float x, float y);
Path getRegionBoundaryPath(int id);
}
}