OnScale y Canvas – ¿cómo ajustar el punto de origen después de ampliar la imagen?
Tengo una aplicación de prueba muy simple con un componente personalizado MyView.java – que muestra una imagen desplazable y escalable (que representa un tablero en un juego de palabras similar a Scrabble):
- ¿Cómo puedo configurar mi aplicación Phonegap para escalar su visor de acuerdo con la resolución del teléfono?
- Traducir y escalar la animación en paralelo
- Mover, escalar y recortar la imagen en android como facebook foto de perfil
- Android ImageView debe ser más grande que la pantalla
- Vídeo de escala de matriz en TextureView Android
1) En mi oyente de la escala yo ajusta el factor de escala:
public boolean onScale(ScaleGestureDetector detector) { mScale *= detector.getScaleFactor(); // XXX how to adjust mOffsetX and mOffsetY ? XXX constrainZoom(); constrainOffsets(); invalidate(); return true; }
2) Y luego en el método de dibujo de mi componente personalizado aplico la traducción y el factor de escala:
protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.translate(mOffsetX, mOffsetY); canvas.scale(mScale, mScale); gameBoard.setBounds( 0, 0, gameBoard.getIntrinsicWidth(), gameBoard.getIntrinsicHeight() ); gameBoard.draw(canvas); }
Por desgracia, parece que hay un pequeño error al escalar con gesto de pellizco –
Puedo ver, que la escala y los límites son de tamaño correcto después de hacer zoom, pero el desplazamiento de la imagen no es.
El problema empeora, cuando el punto de enfoque del gesto de pellizco está lejos de 0, 0 punto de la pantalla.
Es un poco difícil describir el problema en palabras, pero cuando revisas mi proyecto de prueba de GitHub lo verás inmediatamente (y siempre puedes tocar dos veces para restablecer el offset y la escala).
Este es probablemente un problema común con una forma estándar de resolverlo, pero no he sido capaz de encontrarlo todavía.
La imagen del tablero es CC BY-SA por Denelson83 y el código se basa en el How-to support the fling gesture con un blog de efecto rebote .
- Ajustar imagen en ImageButton en Android
- Android - Pinch zoom coordinar el evento ontouch
- La barra de direcciones del navegador Mobile Webkit cambia $ (ventana) .height (); Haciendo el fondo-tamaño: la cubierta rescale cada vez
- Escala drawableLeft en el botón con el texto
- Escala de una aplicación Phonegap para diferentes tamaños de pantalla de Android / densidades?
- Cómo configurar el zoom / ancho inicial para una vista web
- Android ImageView escalado confict
- Android ViewGroup.setScaleX () hace que la vista se recorte
Estás moviendo el lienzo dos veces: primero con translate
, luego con scale(sx,sy,px,py);
.
Usted podría combinar sus enfoques a sus compensaciones en su onScale
y luego usar la scale(sx,sy)
.
- Android SMS Intent Hangouts 2.0
- Varios archivos dex definen Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat con Gradle