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
- Android: ImageView getID (); Devolver entero
- EditText en ListView pierde foco cuando se presiona en Android 4.x
- OnTouchevent () vs onTouch ()
- "Presione y mantenga presionado" en Android necesita cambiar estados (selector XML personalizado) usando onTouchListener
- OnTouch dando extraños puntos de contacto Android
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
- Ocultar teclado en android mientras se toca fuera Editar área de texto
- No puede manejar simultáneamente los eventos de clic y de toque
- PopupWindow TouchInterceptor no funciona
- Método único para implementar onTouchListener () para varios botones
- Ver sólo el registro de MotionEvent.ACTION_DOWN
- Tiempo de aumento de OnLongPress
- GC y onTouch causan un error de señal fatal 11 (SIGSEGV) en la aplicación que utiliza ffmpeg a través de ndk
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.
- Square`s OkHttp. Progreso de la descarga
- Android java.net.SocketException: socket failed: EACCES (Permiso denegado)