Android - ¿Cómo hacer zoom circular / ampliar parte de la imagen?

Estoy tratando de permitir que el usuario toque la imagen y luego, básicamente, una lupa circular mostrará que permitirá al usuario seleccionar mejor un área determinada de la imagen. Cuando el usuario suelta el toque, la parte ampliada desaparecerá. Esto se usa en varias aplicaciones de edición de fotos y estoy intentando implementar mi propia versión. El código que tengo a continuación amplía una parte circular de la vista de imagen pero no elimina ni borra el zoom una vez que suelte el dedo. Actualmente pongo un mapa de bits a un lienzo usandocanvas = new Canvas(bitMap); y luego configurar la vista de imagen usandotakenPhoto.setImageBitmap(bitMap); No estoy seguro de si lo estoy haciendo de la manera correcta. El código onTouch está abajo:

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta