Android - Wie kann ich einen Teil des Bildes kreisförmig zoomen / vergrößern?

Ich versuche, dem Benutzer zu erlauben, das Bild zu berühren, und dann wird im Grunde eine kreisförmige Lupe angezeigt, die es dem Benutzer ermöglicht, einen bestimmten Bereich auf dem Bild besser auszuwählen. Wenn der Benutzer die Berührung freigibt, verschwindet der vergrößerte Teil. Dies wird in mehreren Fotobearbeitungs-Apps verwendet und ich versuche, eine eigene Version davon zu implementieren. Der folgende Code vergrößert einen kreisförmigen Teil der Bildansicht, löscht oder löscht den Zoom jedoch nicht, sobald ich den Finger loslasse. Ich setze derzeit eine Bitmap auf eine Leinwand mitcanvas = new Canvas(bitMap); und stellen Sie dann die Bildansicht mit eintakenPhoto.setImageBitmap(bitMap); Ich bin mir nicht sicher, ob ich es richtig mache. Der onTouch-Code ist unten:

zoomPos = new PointF(0,0);
        takenPhoto.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                 int action = event.getAction(); 
                    switch (action) { 
                        case MotionEvent.ACTION_DOWN: 
                            zoomPos.x = event.getX();
                            zoomPos.y = event.getY();
                            matrix.reset();
                            matrix.postScale(2f, 2f, zoomPos.x, zoomPos.y);
                            shader.setLocalMatrix(matrix);
                            canvas.drawCircle(zoomPos.x, zoomPos.y, 20, shaderPaint);
                            takenPhoto.invalidate();
                            break; 
                        case MotionEvent.ACTION_MOVE: 
                            zoomPos.x = event.getX();
                            zoomPos.y = event.getY();
                            matrix.reset();
                            matrix.postScale(2f, 2f, zoomPos.x, zoomPos.y);
                            canvas.drawCircle(zoomPos.x, zoomPos.y, 20, shaderPaint);
                            takenPhoto.invalidate();
                            break; 
                        case MotionEvent.ACTION_UP:   
                            //clear zoom here?

                            break; 
                        case MotionEvent.ACTION_CANCEL: 
                            break; 
                        default: 
                            break; 
            }
                    return true; 
            } 
            });

Antworten auf die Frage(4)

Ihre Antwort auf die Frage