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).
- Canvas.scale (mScaleFactor, mScaleFactor, detector.getFocusX (), detector.getFocusY ()) arrastrando límite de lío?
- Construcción de un contenedor capaz de hacer zoom
- MapController, OSMdroid, zoomToSpan () congela la aplicación
- Marcadores de mapa de escala por Zoom, Android
- Cómo utilizar Android Map para hacer zoom con gesto de la mano (iphone like)
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(); }
- Cómo generar el gesto de zoom / pellizco para probar para Android
- Dos dedos o pinc zoom a mapview en osmdroid
- Implementar pinch Zoom usando ViewPager
- Cómo fijar correctamente fixTransX y fixTransY de TouchImageView para implementar doubleTap a ZoomOut?
- Zoom y arrastrar imágenes usando matriz en android
- Android GridView pinch zoom
- ¿Cómo puedo hacer que un SurfaceView sea más grande que la pantalla?
- Efecto de zoom de Android ImageView
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/
- ¿Cómo funciona la dependencia de módulos en Android?
- Android ¿dónde está el registro para el archivo para la aplicación en el dispositivo?