2011-08-05 5 views
5

Tengo una imagen en control de vista de imagen. El usuario puede realizar una panorámica y un acercamiento a esta imagen, debido a que las coordenadas xey cambian continuamente. ¿Hay alguna manera de descubrir las coordenadas actuales xey de la imagen dentro del control de imagen? Cualquier código relacionado sería más beneficioso.¿Cómo obtener la coordenada xey de la imagen de mapa de bits en el control de imagen?

+1

Check it out este enlace puede ser útil ..... http://stackoverflow.com/questions/2447564/detect-touch-on-bitmap – Uttam

Respuesta

11

ImageView usa la clase Matrix para hacer escala (Zoom) y la traducción (panorámica). Si puede apropiarse de la matriz, puede recuperar la coordenada (izquierda, arriba) de la vista ampliada/panoramizada.

Código de zoom & imageview extendida pannable está disponible en uno de los stackoverflow posts

En ese puesto verá clase ImageView extendido tiene matriz como una variable miembro utilizado para escalar/traducción.

Puede usar el siguiente código para obtener los límites de ImagevIew (en realidad mapas de bits) con zoom/panned desde la matriz.

RectF r = new RectF(); 
matrix.mapRect(r); 
Log.i(TAG, "Rect " + r.left + " " + r.top + " " + r.right + " " + r.bottom + " " + mOverAllScale + " "); 

RESPUESTA recién agregado

Para entender el código de abajo, tiene que ir a través de este link y entender.

traducción

Cuando el usuario arrastra la imagen, la pantalla de co-ordenada (absoluto) y mapa de bits de coordenadas ir fuera de sincronización. [Todo lo que escriba en el mapa de bits se muestra a través del lienzo (en onDraw())] Si aplica el coloreado, el usuario vería que se aplica en una región diferente en la imagen del mapa de bits. Para corregir esto, necesitas hacer una traducción. La traducción cambiaría las coordenadas de entrada del usuario (que son coordenadas de pantalla) a coordenadas de mapa de bits (como pretendía el usuario) El siguiente fragmento de código lo ayudaría a realizar la traducción.

Let La entrada del usuario co-ordenadas sean (x, y), entonces,

RectF r = new RectF(); 
matrix.mapRect(r); 
Log.i(TAG, "Rect " + r.left + " " + r.top + " " + r.right + " " + r.bottom + " " + mOverAllScale + " "); 
float newX = x - r.left; 
float newY = y - r.top; 

Se utiliza nuevas coordenadas en lugar de (x, y).

zoom (Scaling)

Cuando pellizcos de usuario de entrada/salida; el mapa de bits se acerca o se acerca Zoomed. Debe observar que el mapa de bits original no se cambia, el acercamiento solo es desde la perspectiva de la pantalla. Esto da como resultado una pérdida de sincronización entre la pantalla y el mapa de bits. El color aplicado en la pantalla debe reflejarse en la imagen mostrada. El siguiente fragmento de código lo ayudaría a escalar.

// mScalingFactor shall contain the scale/zoom factor 
float scaledX = (event.getX() - r.left); 
float scaledY = (event.getY() - r.top); 

scaledX /= mScalingFactor; 
scaledY /= mScalingFactor; 

Shash

+0

gracias Shash. Por favor, hágamelo saber acerca de sus hallazgos. –

+0

Editado la respuesta – Shash316

+0

Muchas gracias Shash. –

Cuestiones relacionadas