Erstellen einer darstellbaren und zoombaren Bildansicht in Android

Tor

Erstellen Sie eine Bildansicht, die gezeichnet und gezoomt werden kann.

Das bedeutet, wenn ich einen Knopf drücke, um einzuschalten, ist es zeichnbar,

oder wenn ich ausschalte, ist das zoombar.

* Beachten Sie, dass die Zeichnungen zoomen und mit der Bildansicht übereinstimmen sollten.

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

or kurzem habe ich eine benutzerdefinierte Bildansicht wie diese geschrieben:

 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;
        }
    }

Und das XML ist:

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

Das Problem ist ,wie man es auch zoombar macht? Beachten Sie, dass dasZeichnungen sollten beim Zoomen an der Bildansicht ausgerichtet sein.

Versuchen Sie, eine benutzerdefinierte ImageView-Bibliothek zu verwenden, aber Sie haben kein Glück.

z.B. Wenn ich die Fotoansicht verwende, kann es sich um einen Zoom handeln, aber die Zeichnungen werden nicht ausgerichtet. Die Zoomstufe wird zurückgesetzt, nachdem ich das Zoomen ein- / ausgeschaltet habe.https: //github.com/chrisbanes/PhotoVie

Auch finden Sie eine andere Bibliothek wie das, aber nicht die benutzerdefinierte Ansicht Fall passenhttps: //github.com/matabii/scale-imageview-androi

Update1: demo

Empfohlen, diese App zu referenzieren, die Zeichenfunktion ist eigentlich die gleiche wie die, um die ich mich bemühe, aber ich kann nicht herausfinden, wie sie es schaffen.

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

Vielen Dan

Update2: Von Sandeep Maram Source

Vielen Dank Sandeep Maram, nach dem Testen des Codes, alles funktioniert gut, das einzige, was bleibt, ist die Zeichnungen nicht mit der Zoom-Ansicht auszurichten. Bitte schauen Sie sich den Screenshot an

Vor:

Nach

Der Kreis wird beim Zoomen nicht vergrößert / verkleinert, wäre echt schön, wenn das behoben wird. auch ist das egal ob das bild die schaltfläche überlappt.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage