Cómo hacer zoom en android: mantener la imagen a la vista

Sé que hay toneladas de hilos en realmente conseguir pellizcar el zumbido aplicado – pero conseguí esto lejos ya.

Estoy usando SimpleScaleGestureListener para manejar el pellizco. He conseguido asegurarse de que no se puede alejar más que mantener la altura de la imagen igual que el tamaño de la pantalla (por lo que la altura de la imagen siempre será al menos la altura del tamaño de pantalla disponible).

Sin embargo, estoy buscando una manera de detectar automáticamente si la imagen se está explorando fuera de estos límites. Al igual que la forma estándar Android de mostrar la imagen. Por lo tanto, si hago zoom en la imagen hacia arriba y luego hacia abajo, quiero que detecte cuando la parte inferior de la imagen llega a la parte inferior de la pantalla y, a continuación, el pivote del zoom se ajusta en consecuencia, Espacio en blanco "por encima o por debajo de la propia imagen. ¿Alguien puede ayudarme?

Para referencia, he aquí mis métodos onScale y onDraw:

public boolean onScale(ScaleGestureDetector detector){ float minScale = (float) ((float) SCREEN_SIZE.y / (float) DRAWABLE_SIZE.y); mScaleFactor *= detector.getScaleFactor(); mScaleFactor = Math.max(minScale, Math.min(mScaleFactor, 5.0f)); invalidate(); return true; } protected void onDraw(Canvas canvas) { canvas.save(); canvas.drawColor(Color.DKGRAY); canvas.translate(mPosX, mPosY); canvas.scale(mScaleFactor, mScaleFactor, getDrawable().getIntrinsicWidth() / 2, getDrawable().getIntrinsicHeight() / 2); this.getDrawable().draw(canvas); canvas.restore(); } 

Puede utilizar android.graphics.Matrix para transformar el mapa de bits dibujado. Matrix tiene escala y traducción en ella.

Simplemente aplicaría la matriz al lienzo: canvas.setMatrix

Puede calcular fácilmente el ajuste a la pantalla para el rectángulo deseado:

 Matrix.setRectToRect 

Donde el origen es el rectángulo de resolución real de tu imagen (Bitmap) con 0,0 en la parte izquierda / superior y el ancho / altura en la parte inferior derecha. Dst es el rectángulo de la vista de destino donde se dibujará Bitmap.

Entonces también puede resolver su tarea – saber dónde se dibujarán las fronteras de su imagen. Matrix.mapRect calculará donde el rectángulo de Bitmap (como se ha comentado anteriormente) aparecerá en pantalla en las coordenadas de la pantalla. Entonces usted puede simplemente donde el lado izquierdo de la imagen se dibuja relativo al lado izquierdo de la pantalla, iguales para arriba / la derecha / la parte inferior.

No voy a darle código, sólo indicaciones que el camino a seguir. Recientemente he codificado el visor de imágenes con pinch-zoom, ajuste a pantalla, transiciones animadas, etc, y todo se hizo con Matrix y manipulaciones de eso.

Una simple solución es usar este widget

http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/

  • Android: no se muestra ImageView con UIL y TouchImageView
  • Cómo agrandar el elemento central en un listview - android?
  • ¿La mejor manera de tener una superposición de zoom y pan en Android?
  • Configuración del nivel de zoom máximo en google maps android api v2
  • Android google maps no se puede ampliar con compás activo
  • Android pinch / zoom y glfrustum
  • Google Maps v2 Establecer nivel de zoom
  • Acción de zoom en android utilizando appium-python-client
  • Dos dedos o pinc zoom a mapview en osmdroid
  • TextView setScaleX () / setScaleY () y setTextIsSelectable (true) selección
  • Pinch de la vista web de Android zoom local image
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.