title: ImageView onTouchListener: cant touch the imageview behind
body: <p>I got a tutorial of imageview transformation, w/c I really need. <a href="http://judepereira.com/blog/multi-touch-in-android-translate-scale-and-rotate/" rel="nofollow">here is the link</a>. It works fine but I need to have some modification. My problem here is, when I add the second imageview, I cant modify the first imageview that I added. It seems that I can't touch it because it is behind the 2nd view. I've read a comment in the link, that is asking for this problem too and he resolve it by doing settag and gettag. I've no idea how to do it. Any suggestion guys? thanks.</p>
  
  <pre><code>public class MainActivity extends Activity implements OnTouchListener {
  
      // these matrices will be used to move and zoom image
      private Matrix matrix = new Matrix();
      private Matrix savedMatrix = new Matrix();
      // we can be in one of these 3 states
      private static final int NONE = 0;
      private static final int DRAG = 1;
      private static final int ZOOM = 2;
      private int mode = NONE;
      // remember some things for zooming
      private PointF start = new PointF();
      private PointF mid = new PointF();
      private float oldDist = 1f;
      private float d = 0f;
      private float newRot = 0f;
      private float[] lastEvent = null;
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          ImageView view = (ImageView) findViewById(R.id.imageView);
          ImageView view2 = (ImageView) findViewById(R.id.imageView2);
          view.setOnTouchListener(this);
          view2.setOnTouchListener(this);
      }
  
      public boolean onTouch(View v, MotionEvent event) {
          // handle touch events here
          ImageView view = (ImageView) v;
          switch (event.getAction() &amp; MotionEvent.ACTION_MASK) {
              case MotionEvent.ACTION_DOWN:
                  savedMatrix.set(matrix);
                  start.set(event.getX(), event.getY());
                  mode = DRAG;
                  lastEvent = null;
                  break;
              case MotionEvent.ACTION_POINTER_DOWN:
                  oldDist = spacing(event);
                  if (oldDist &gt; 10f) {
                      savedMatrix.set(matrix);
                      midPoint(mid, event);
                      mode = ZOOM;
                  }
                  lastEvent = new float[4];
                  lastEvent[0] = event.getX(0);
                  lastEvent[1] = event.getX(1);
                  lastEvent[2] = event.getY(0);
                  lastEvent[3] = event.getY(1);
                  d = rotation(event);
                  break;
              case MotionEvent.ACTION_UP:
              case MotionEvent.ACTION_POINTER_UP:
                  mode = NONE;
                  lastEvent = null;
                  break;
              case MotionEvent.ACTION_MOVE:
                  if (mode == DRAG) {
                      matrix.set(savedMatrix);
                      float dx = event.getX() - start.x;
                      float dy = event.getY() - start.y;
                      matrix.postTranslate(dx, dy);
                  } else if (mode == ZOOM) {
                      float newDist = spacing(event);
                      if (newDist &gt; 10f) {
                          matrix.set(savedMatrix);
                          float scale = (newDist / oldDist);
                          matrix.postScale(scale, scale, mid.x, mid.y);
                      }
                      if (lastEvent != null &amp;&amp; event.getPointerCount() == 2) {
                          newRot = rotation(event);
                          float r = newRot - d;
                          float[] values = new float[9];
                          matrix.getValues(values);
                          float tx = values[2];
                          float ty = values[5];
                          float sx = values[0];
                          float xc = (view.getWidth() / 2) * sx;
                          float yc = (view.getHeight() / 2) * sx;
                          matrix.postRotate(r, tx + xc, ty + yc);
                      }
                  }
                  break;
          }
  
         view.setImageMatrix(matrix);
          return true;
      }
  
  
      /**
       * Determine the space between the first two fingers
       */
      private float spacing(MotionEvent event) {
          float x = event.getX(0) - event.getX(1);
          float y = event.getY(0) - event.getY(1);
          return FloatMath.sqrt(x * x + y * y);
      }
  
      /**
       * Calculate the mid point of the first two fingers
       */
      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);
      }
  
      /**
       * Calculate the degree to be rotated by.
       *
       * @param event
       * @return Degrees
       */
      private float rotation(MotionEvent event) {
          double delta_x = (event.getX(0) - event.getX(1));
          double delta_y = (event.getY(0) - event.getY(1));
          double radians = Math.atan2(delta_y, delta_x);
          return (float) Math.toDegrees(radians);
      }
  }
  
  
  &lt;?xml version="1.0" encoding="utf-8"?&gt;
  
  &lt;FrameLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"&gt;
  
  &lt;ImageView android:id="@+id/imageView"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:scaleType="matrix"
   android:src="@drawable/chill"
   /&gt;
  
  &lt;ImageView
      android:id="@+id/imageView2"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
  android:scaleType="matrix" 
      android:src="@drawable/awesome"
     /&gt;
  
  
  &lt;/FrameLayout&gt;
  </code></pre>