content: package snowf0x.github.io.photoeditor;
  
  import androidx.appcompat.app.AppCompatActivity;
  
  import android.graphics.Matrix;
  import android.graphics.PointF;
  import android.os.Bundle;
  import android.view.MotionEvent;
  import android.view.View;
  import android.widget.FrameLayout;
  import android.widget.ImageView;
  
  public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
      private ImageView mOrologio;
      private FrameLayout mPhotoBox;
      Matrix matrix = new Matrix();
      Matrix savedMatrix = new Matrix();
      // We can be in one of these 3 states
      static final int NONE = 0;
      static final int DRAG = 1;
      static final int ZOOM = 2;
      int mode = NONE;
  
      // Remember some things for zooming
      PointF start = new PointF();
      PointF mid = new PointF();
      float oldDist = 1f;
  
  
  
      private void bindViews() {
          mPhotoBox = (FrameLayout) findViewById(R.id.fotoBox);
  
          mOrologio = (ImageView) findViewById(R.id.c);
          mOrologio.setOnTouchListener(this);
  
      }
  
      private float spacing(MotionEvent event) {
          float x = event.getX(0) - event.getX(1);
          float y = event.getY(0) - event.getY(1);
          return (float) Math.sqrt(x * x + y * y);
      }
  
      private void midPoint(PointF point, MotionEvent event) {
          float x = event.getX(0) + event.getX(1);
          float y = event.getY(0) + event.getY(1);
          point.set(x / 2, y / 2);
      }
  
      @Override
      public boolean onTouch(View v, MotionEvent event) {
          ImageView view = (ImageView) v;
  
          switch (event.getAction() & MotionEvent.ACTION_MASK) {
              case MotionEvent.ACTION_DOWN:
                  savedMatrix.set(matrix);
                  start.set(event.getX(), event.getY());
                  mode = DRAG;
                  break;
              case MotionEvent.ACTION_POINTER_DOWN:
                  oldDist = spacing(event);
                  if (oldDist > 10f) {
                      savedMatrix.set(matrix);
                      midPoint(mid, event);
                      mode = ZOOM;
                  }
                  break;
              case MotionEvent.ACTION_UP:
              case MotionEvent.ACTION_POINTER_UP:
                  mode = NONE;
                  break;
              case MotionEvent.ACTION_MOVE:
                  if (mode == DRAG) {
                      // ...
                      matrix.set(savedMatrix);
                      matrix.postTranslate(event.getX() - start.x,
                              event.getY() - start.y);
                  }
                  else if (mode == ZOOM) {
                      float newDist = spacing(event);
                      if (newDist > 10f) {
                          matrix.set(savedMatrix);
                          float scale = newDist / oldDist;
                          matrix.postScale(scale, scale, mid.x, mid.y);
                      }
                  }
                  break;
          }
  
          view.setImageMatrix(matrix);
          return true; // indicate event was handled
      }
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          bindViews();
      }
  }
  