Crear una vista de imagen dibujable y con zoom en Android

Gol:

Cree una vista de imagen que se pueda dibujar y ampliar,

Eso significa que cuando presiono un botón para activarlo, se puede dibujar,

o cuando apago, eso es zoomable.

* Observe que los dibujos deben alinearse con la vista de imagen

================================================== =============

Recientemente escribí una vista de imagen dibujable personalizada como esta:

 public class DrawView extends ImageView {

        private int color = Color.BLACK;
        private float width = 4f;
        private List<Holder> holderList = new ArrayList<Holder>();

        private class Holder {      
            Path path;
            Paint paint;

            Holder(int color, float width) {
                path = new Path();
                paint = new Paint();
                paint.setAntiAlias(true);
                paint.setStrokeWidth(width);
                paint.setColor(color);
                paint.setStyle(Paint.Style.STROKE);
                paint.setStrokeJoin(Paint.Join.ROUND);
                paint.setStrokeCap(Paint.Cap.ROUND);
            }
        }

        public DrawView(Context context) {
            super(context);
            init();
        }

        public DrawView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }

        public DrawView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init();
        }

        private void init() {
            holderList.add(new Holder(color, width));
        }

        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            for (Holder holder : holderList) {
                canvas.drawPath(holder.path, holder.paint);
            }
        }

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            float eventX = event.getX();
            float eventY = event.getY();

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    holderList.add(new Holder(color,width));
                    holderList.get(holderList.size() - 1).path.moveTo(eventX, eventY);
                    return true;
                case MotionEvent.ACTION_MOVE:
                    holderList.get(holderList.size() - 1).path.lineTo(eventX, eventY);
                    break;
                case MotionEvent.ACTION_UP:
                    break;
                default:
                    return false;
            }

            invalidate();
            return true;
        }

        public void resetPaths() {
            for (Holder holder : holderList) {
                holder.path.reset();
            }
            invalidate();
        }

        public void setBrushColor(int color) {
            this.color = color;
        }

        public void setWidth(float width) {
            this.width = width;
        }
    }

Y el XML es:

<com.example.tool.DrawView
    android:id="@+id/draw"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:adjustViewBounds="true" />

El problema es ,cómo hacerlo también con zoom? nota que ellos dibujos deben alinearse con la vista de imagen al hacer zoom.

Intente utilizar alguna biblioteca personalizada de visualización de imágenes, pero no tuvo suerte.

p.ej. Cuando uso photoview, puede ser zoom pero los dibujos no se alinean, y el nivel de zoom se restablecerá después de activar / desactivar el zoomhttps://github.com/chrisbanes/PhotoView

Además, encuentre alguna otra biblioteca como esa, pero no se ajusta al caso de vista personalizadahttps://github.com/matabii/scale-imageview-android

Actualización1: demostración

Recomendado para hacer referencia a esta aplicación, la función de dibujo es en realidad la misma que estoy luchando por lograr, pero no puedo entender cómo lo hacen.

https://play.google.com/store/apps/details?id=com.zentertain.photoeditor&hl=en

Gracias

Actualización2: de la fuente de Sandeep Maram

Muchas gracias Sandeep Maram, después de probar el código, todo funciona bien, lo único que queda es que los dibujos no se alinean con la vista de zoom. Por favor, eche un vistazo a la captura de pantalla

Antes de:

Después:

El círculo no se escala hacia arriba o hacia abajo cuando se hace zoom, sería realmente bueno si lo arreglases. Además, eso no importa si la imagen se superpone al botón.

Respuestas a la pregunta(2)

Su respuesta a la pregunta