title: Android - How to circular zoom/magnify part of image?
body: <p>I am trying to allow the user to touch the image and then basically a cirular magnifier will show that will allow the user to better select a certain area on the image.  When the user releases the touch the magnified portion will dissapear.  This is used on several photo editing apps and I am trying to implement my own version of it.  The code I have below does magnify a circular portion of the imageview but does not delete or clear the zoom once I release my finger.  I currently set a bitmap to a canvas using <code>canvas = new Canvas(bitMap);</code> and then set the imageview using <code>takenPhoto.setImageBitmap(bitMap);</code>   I am not sure if I am going about it the right way.  The onTouch code is below:</p>
  
  <pre><code>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; 
              } 
              });
  </code></pre>