Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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.

  • Pase Android NestedScrollView desplazamientos horizontales a un padre Ver
  • SwipeListView sólo un elemento abierto a la vez
  • OnTouchevent () vs onTouch ()
  • EditText en ListView pierde foco cuando se presiona en Android 4.x
  • Implementación de la interfaz View.IOnTouchListener
  • No puede manejar simultáneamente los eventos de clic y de toque
  • Cómo combinar OnClickListener y OnTouchListener para un ImageButton
  • Arrastrar y soltar imágenes en android
  • 6 Solutions collect form web for “Obtener coordenadas reales de xy de los usuarios”

    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.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.