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/

  • Mantenga el mapa centrado, independientemente de dónde pinche el zoom en android
  • Habilitación del zoom en la vista de desplazamiento
  • TextView setScaleX () / setScaleY () y setTextIsSelectable (true) selección
  • Pinch Ampliar la vista web
  • Cómo capturar el final de una animación Zoom In / Out de un MapController?
  • Google Maps v2 Establecer nivel de zoom
  • Zoom suave en vista de mapa
  • Aplicación existente explotando con Android 3.0 XOOM. ¿Fugas de ZoomButtonsController?
  • ¿Cómo hacer que mi ImageView se pueda ampliar?
  • Abrir ImageView con Zoom y desplazamiento
  • ¿Cómo puedo implementar zoom en la Biblioteca Fresco?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.