Obtener coordenadas reales de xy de los usuarios

Necesito asignar las coordenadas X, Y del evento onTouch a las coordenadas X, Y del mapa de bits dentro del ImageView para hacer esto. Utilizo el siguiente enfoque.

Sin embargo, este enfoque sólo parece funcionar cuando:
A) Realice un zoom completo de la imagen (todo el recorrido)
B) Trabaja en cualquier caso si hago mi aplicación a pantalla completa

final int index = event.getActionIndex(); touchLocation = new float[] { event.getX(index), event.getY(index) }; Matrix matrix = new Matrix(); ImageView view = getImageView(); view.getImageMatrix().invert(matrix); matrix.postTranslate(view.getScrollX(), view.getScrollY()); matrix.mapPoints(touchLocation); // touchLocation[0] is real x and [1] is real y 

Sin embargo, mi actividad es una actividad de ActionBar, así que me siento un poco equivocado en el eje Y. He intentado deducir la altura de ActionBar y StatusBar pero esto no siempre funciona.

Lo que es extraño es que en pantalla completa no importa si amplío completamente mi imagen dentro o fuera siempre consigo coordenadas correctas calculadas sin embargo con cualquier otro tipo de actividad esto no mapeará puntos correctamente.

Utilizo este código para conseguir el eje real del tacto en la pantalla:

 PointF p = new PointF(event.getX(), event.getY()); View v = this;// your view View root = v.getRootView(); while (v.getParent() instanceof View && v.getParent() != root) { py += v.getTop(); px += v.getLeft(); v = (View) v.getParent(); } 

Espero que esto funcione para usted también

No puedo decir del código pegado cuál es el problema exacto, pero parece que deberías usar: http://developer.android.com/reference/android/view/View.html#getLocationOnScreen (int []) y Tener esto en cuenta para su cálculo.

Asegúrese de que su barra de acción y las alturas de estado están en píxeles y no dp y también puede intentar utilizar getRawX () y getRawY () en lugar de getX (), getY ()

Prueba de esta manera

 int[] viewCoords = new int[2]; imageView.getLocationOnScreen(viewCoords); 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 

Obtendrá las coordenadas x e y de esta manera

Anule onTouchEvent (evento MotionEvent) y luego llame a event.getX () y event.getY () para obtener las posiciones de coordenadas de donde el usuario tocó [serán flotantes]. (Por: @antonyt)

Paso 1: Cree un CustomFrameLayout personalizado extendiendo FrameLayout en su aplicación que puede tomar un objeto de interfaz en el constructor. (La interfaz se creará en el paso 3)

Paso 2: Método Write / Override onInterceptTouchEvent .

Paso 3: Crear una interfaz para enviar / recibir los parámetros deseados.

Paso 4: Implemente la interfaz y el método creados en el paso 3 en su actividad / fragmento

Paso 5: En su actividad / fragmento, cree el objeto de CustomFrameLayout con la interfaz del implemento.

Paso 6: En el método de superposición de diseño personalizado, pase el valor a la actividad a través de la interfaz

¡Espero que esto funcione!


Hacer una demostración tomaría un poco más de tiempo, tendría que publicar como comentario pero todavía publicar como respuesta para que algún día pueda mejorar con algún código de ejemplo.

  • Diseño con posición dinámica
  • Android: OnTouch, MotionEvent.ACTION_MOVE no está reconocido?
  • ¿Cómo manejar hacer clic en las vistas secundarias y tocar en los ViewGroups de los padres?
  • Disparar Evento táctil desde la vista DialogFragment a la vista de actividad principal
  • Manejo del evento de toque Intercept sin extender ViewGroup
  • Android principiante: toque eventos en android gridview
  • Gire la vista de disposición de androide sobre su centro usando el oyente táctil
  • ¿Cómo puedo pasar Touch Listeners a la vista personalizada para arrastrar y soltar?
  • OnTouch funciona, pero OnClickListener no?
  • Analog SetOnTouchListener o cómo se utiliza en xamarin, qué argumento debe ser
  • ¿Es OnTouchListener más rápido que OnClickListener?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.