Zoomlayout: Obtener coordenadas dibujables

Creado en 15 feb. 2019  ·  10Comentarios  ·  Fuente: natario1/ZoomLayout

Hola,

Muchas gracias por trabajar duro en esta increíble biblioteca. Estoy bastante satisfecho con el resultado y la API, sin embargo, me gustaría obtener las coordenadas X e Y del dibujable dentro de ZoomImageView porque dibujo algunos círculos en la parte superior de ZoomImageView y me gustaría que se movieran junto con el dibujable (también después del zoom). Piense en el problema, ya que tiene un mapa (ZoomImageView) y encima tiene algunos pines que tienen que mantener la misma posición relativa cuando el usuario acerca / aleja o desplaza la vista. Cualquier ayuda será muy apreciada.

Gracias.

question stale

Comentario más útil

Markus tiene razón, pero en lugar de zoom debería usar realZoom para estar seguro.

Entonces, o necesita panX o panX * realZoom (o menos esto, dependiendo de sus cálculos). Depende de cómo los esté dibujando.

Además, dependiendo de cómo esté dibujando, es posible que deba tener en cuenta otras cosas, como el tamaño de la pantalla / el tamaño del contenedor. Al final, es un problema puramente matemático, solo asegúrate de entender qué son panX y panY .

También puede usar engine.addListener() para recibir devoluciones de llamada.

Todos 10 comentarios

Puede obtener las coordenadas usando getPanX y getPanY .

Puede obtener las coordenadas usando getPanX y getPanY .

esto funcionaría, pero obtener la panorámica no considera el factor de escala del zoom. Creo que el sistema de coordenadas se amplifica cuando se acerca el zoom. ¿Hay alguna otra forma de hacerlo con respecto al zoom y el factor de escala?

Creo que puedes simplemente multiplicarlo con la propiedad zoom .

Creo que puedes simplemente multiplicarlo con la propiedad zoom .

No es tan preciso como obtener el zoom y hacer la multiplicación no considerará el pivote central del zoom (donde está ocurriendo el pellizco) por lo que esto traduciría linealmente todas las coordenadas basadas en la posición predeterminada del pivote. Intenté restablecer el pivote X e Y en la posición de pellizco, pero no tuve suerte.

¿Por qué es importante el punto de pivote del pellizco cuando las vistas en la parte superior del diseño de zoom tienen una posición fija con respecto a él? ¿No debería ser suficiente mover las vistas en la parte superior al igual que la panorámica de diseño de zoom pero al revés? Cuando se amplía el diseño del zoom (es decir, zoom> 1), la traducción de las vistas en la parte superior debería ser menor que el tamaño de píxel original porque, como dijiste, las coordenadas del diseño del zoom se amplificarán (fuera de mi cabeza, pensaría que solo necesita dividir la panorámica por el factor de zoom).

¿Por qué es importante el punto de pivote del pellizco cuando las vistas en la parte superior del diseño de zoom tienen una posición fija con respecto a él? ¿No debería ser suficiente mover las vistas en la parte superior al igual que la panorámica de diseño de zoom pero al revés? Cuando se amplía el diseño del zoom (es decir, zoom> 1), la traducción de las vistas en la parte superior debería ser menor que el tamaño de píxel original porque, como dijiste, las coordenadas del diseño del zoom se amplificarán (fuera de mi cabeza, pensaría que solo necesita dividir la panorámica por el factor de zoom).

Cuando se usa la panorámica y el zoom, los pines del diseño superpuesto (en la parte superior del zoomLayout) se transponen en la diagonal como transposición lineal. Lo que quiero decir aquí es que algunas veces pellizcas en una posición donde se encuentra el pin, por lo tanto, este último no debe transponerse en absoluto, pero en mi caso, si multiplicarlo o dividirlo, solo viaja en diagonal. Además de todo eso, creo que esta biblioteca necesita que se agreguen un par de devoluciones de llamada, como "onZoomUpdate -> zoom: Float" y "onViewPanUpdate -> float [x, y]"

Markus tiene razón, pero en lugar de zoom debería usar realZoom para estar seguro.

Entonces, o necesita panX o panX * realZoom (o menos esto, dependiendo de sus cálculos). Depende de cómo los esté dibujando.

Además, dependiendo de cómo esté dibujando, es posible que deba tener en cuenta otras cosas, como el tamaño de la pantalla / el tamaño del contenedor. Al final, es un problema puramente matemático, solo asegúrate de entender qué son panX y panY .

También puede usar engine.addListener() para recibir devoluciones de llamada.

Markus tiene razón, pero en lugar de zoom debería usar realZoom para estar seguro.

Entonces, o necesita panX o panX * realZoom (o menos esto, dependiendo de sus cálculos). Depende de cómo los esté dibujando.

Además, dependiendo de cómo esté dibujando, es posible que deba tener en cuenta otras cosas, como el tamaño de la pantalla / el tamaño del contenedor. Al final, es un problema puramente matemático, solo asegúrate de entender qué son panX y panY .

También puede usar engine.addListener() para recibir devoluciones de llamada.

Suena bien, lo intentaré. Muchas gracias

@andromedcodes ¿

Esto es lo que he probado:

ZoomImageView imgScreen;
Matrix m = new Matrix(imgScreen.getImageMatrix());
        Drawable d = imgScreen.getDrawable();
        RectF drawableRect = new RectF(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        RectF viewRect = new RectF(0, 0, imgScreen.getWidth(), imgScreen.getHeight());
        m.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER);
        m.invert(m);

        // Convert the points inside the image
        float[] points = new float[2];
        points[0] = event.getX(); //holds x coordinate of drawable
        points[1] = event.getY(); //holds y coordinate of drawable
        m.mapPoints(points);

Pero no entiendo cómo ajustar los valores de panorámica y zoom allí. Cualquier ayuda sería apreciada. Gracias

Este problema se ha marcado automáticamente como obsoleto porque no ha tenido actividad en los últimos 20 días. Se cerrará si no se realizan más actividades en los próximos siete días. Gracias por sus aportaciones.

¿Fue útil esta página
0 / 5 - 0 calificaciones