Как добавить маркер/контакт на ImageView Android?

Я хотел бы спросить о том, как реализовать или добавить маркер на imageView. Я рендерил SVG с помощью svglib и использовал customImageView, чтобы я мог масштабировать и перемещать изображение.

вот мой код о том, как я использовал свой customImageView

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        SVG svg;
        switch (mNum) {

        case 1:
            svg = SVGParser.getSVGFromResource(getResources(), R.raw.t1);
            break;
        case 2:
            svg = SVGParser.getSVGFromResource(getResources(), R.raw.t2);
            break;
        case 3:
            svg = SVGParser.getSVGFromResource(getResources(), R.raw.t3);
            break;
        case 4:
            svg = SVGParser.getSVGFromResource(getResources(), R.raw.t4);
            break;
        default:
            svg = SVGParser.getSVGFromResource(getResources(),
                    R.raw.android);

        }

        View v = inflater.inflate(R.layout.hello_world, container, false);
        View tv = v.findViewById(R.id.text);
        imageView = (GestureImageView) v.findViewById(R.id.imageView1);
        imageView.setStrict(false);
        imageView.setStartingScale(lastScale);
        // if(lastXPosition!=0 && lastYPosition!=0)
        imageView.setStartingPosition(lastXPosition, lastYPosition);
        // Log.i("tag",
        // "lastXPosition" + lastXPosition);
        // Log.i("tag",
        // "lastYPosition" + lastYPosition);
        // Log.i("tag",
        // "lastScale" + lastScale);
        // imageView.setRotation(45);
        // imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        if (Build.VERSION.SDK_INT > 15)
            imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        imageView.setImageDrawable(svg.createPictureDrawable());
        ((TextView) tv).setText("Floor number: " + mNum);
        imageView.setBackgroundColor(Color.WHITE);
        // tv.setBackgroundDrawable(getResources().getDrawable(
        // android.R.drawable.gallery_thumb));
        // imageView.setScaleType(ScaleType.CENTER);
        // ((GestureImageView)imageView).setScale(x);
        return v;
    }

Теперь я хотел бы добавить значок, как на картинке ниже...

My problem
(источник: modality.com)

Но моя проблема в том, что когда я перемещаюсь вокруг маркера, который я добавил, он не связан с SVG-изображением, поэтому при панорамировании остается в определенном положении...

Вот мой код... ПРИМЕЧАНИЕ: еще не окончательно... Я все еще ищу способ заставить это работать, и я использую увеличенное изображение в качестве карты...

@Override
protected void onDraw(Canvas canvas) {

    if (layout) {
        if (drawable != null && !isRecycled()) {
            canvas.save();

            float adjustedScale = scale * scaleAdjust;

            canvas.translate(x, y);

            if (rotation != 0.0f) {
                canvas.rotate(rotation);
            }

            if (adjustedScale != 1.0f) {
                canvas.scale(adjustedScale, adjustedScale);
            }

            drawable.draw(canvas);

            canvas.restore();
        }

        if (drawLock.availablePermits() <= 0) {
            drawLock.release();
        }
    }

    // ---add the marker---
    Bitmap marker = BitmapFactory.decodeResource(getResources(),
            R.drawable.search_marker_icon);
    canvas.drawBitmap(marker, 40, 40, null);
    Paint mPaint = new Paint();
    mPaint.setColor(Color.RED);
    canvas.drawCircle(60, 60, 5, mPaint);
    super.onDraw(canvas);
} 

Спасибо.... я новичок в Android :) надеюсь, вы можете мне помочь....

My problem

Ответ 1

 drawable.draw(canvas);

// ---add the marker---
Bitmap marker = BitmapFactory.decodeResource(getResources(),
        R.drawable.search_marker_icon);
canvas.drawBitmap(marker, 40, 40, null);
Paint mPaint = new Paint();
mPaint.setColor(Color.RED);
canvas.drawCircle(60, 60, 5, mPaint);


        canvas.restore();
    }

    if (drawLock.availablePermits() <= 0) {
        drawLock.release();
    }
}
 super.onDraw(canvas);
}   

Вам нужно сделать это до того, как canvas.restore.....: D получил это решение в прошлом году...... thnx для помощи ребятам.... мое приложение почти сделано:)

Ответ 2

Это хорошая библиотека для отображения изображений, которая поддерживает масштабирование/панорамирование и добавление булавок над изображениемhttps://github.com/davemorrissey/subsampling-scale-image-view

Ответ 3

Реализация HTML-карты, как элемент в Android View:

  • Поддерживает изображения как рисованные или растровые изображения в макете
  • Позволяет список тегов области в xml
  • Позволяет использовать вырезанные и вставляемые теги HTML-области в ресурс xml (т.е. возможность принимать HTML-карту - и изображение и использовать его с минимальным редактированием).
  • Поддерживает панорамирование, если изображение больше экрана устройства
  • Поддержка масштабирования
  • Поддерживает обратные вызовы при удалении области.
  • Поддерживает отображение аннотаций в виде текста пузырьков и обеспечивает обратный вызов, если пузырь срабатывает

попробуйте эту ссылку, вы найдете свое решение https://github.com/catchthecows/AndroidImageMap