Obtener la posición táctil dentro de la imagen en Android

Tengo una vista de imagen en mi actividad y puedo obtener la posición donde el usuario toca la vista de la imagen, a través de TouchListener. Puse otra imagen donde el usuario toca esa imagen. Necesito almacenar la posición táctil (x, y) y usarla en otra actividad para mostrar las tags. Guardé la posición táctil en la primera actividad. En la primera actividad, mi imagen vista en la parte superior de la pantalla. En la segunda actividad, está en la parte inferior de la pantalla. Si utilizo la posición almacenada desde la primera actividad, coloco la imagen de la etiqueta en la parte superior, no en la vista de la imagen, donde hice clic previamente en la primera actividad. ¿Hay alguna forma de obtener el puesto dentro de la imagen?

FirstActivity:

cp.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { x = (int) event.getX(); y = (int) event.getY(); Log.v("touched x val of cap img >>", x + ""); Log.v("touched y val of cap img >>", y + ""); tag.setVisibility(View.VISIBLE); int[] viewCoords = new int[2]; cp.getLocationOnScreen(viewCoords); int imageX = x - viewCoords[0]; // viewCoods[0] is the X coordinate int imageY = y - viewCoords[1]; // viewCoods[1] is the y coordinate Log.v("Real x >>>",imageX+""); Log.v("Real y >>>",imageY+""); RelativeLayout rl = (RelativeLayout) findViewById(R.id.lay_lin); ImageView iv = new ImageView(Capture_Image.this); Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.tag_icon_32); iv.setImageBitmap(bm); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); params.leftMargin = x; params.topMargin = y; rl.addView(iv, params); Intent intent= new Intent(Capture_Image.this,Tag_Image.class); Bundle b=new Bundle(); b.putInt("xval", imageX); b.putInt("yval", imageY); intent.putExtras(b); startActivity(intent); return false; } }); 

En TagImage.java usé lo siguiente:

 im = (ImageView) findViewById(R.id.img_cam22); b=getIntent().getExtras(); xx=b.getInt("xval"); yy=b.getInt("yval"); im.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int[] viewCoords = new int[2]; im.getLocationOnScreen(viewCoords); int imageX = xx + viewCoords[0]; // viewCoods[0] is the X coordinate int imageY = yy+ viewCoords[1]; // viewCoods[1] is the y coordinate Log.v("Real x >>>",imageX+""); Log.v("Real y >>>",imageY+""); RelativeLayout rl = (RelativeLayout) findViewById(R.id.lay_lin); ImageView iv = new ImageView(Tag_Image.this); Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.tag_icon_32); iv.setImageBitmap(bm); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( 30, 40); params.leftMargin =imageX ; params.topMargin = imageY; rl.addView(iv, params); return true; } }); 

Puede obtener la esquina superior izquierda de su vista de la siguiente manera:

 int[] viewCoords = new int[2]; imageView.getLocationOnScreen(viewCoords); 

Desde esta y las coordenadas táctiles puede calcular el punto dentro de ImageView:

 int touchX = (int) event.getX(); int touchY = (int) event.getY(); int imageX = touchX - viewCoords[0]; // viewCoords[0] is the X coordinate int imageY = touchY - viewCoords[1]; // viewCoords[1] is the y coordinate