Estoy tratando de mostrar una imagen, que se puede ampliar y panoramizar, y que gira con una brújula. Con el siguiente código, las tres acciones funcionan, pero se influyen mutuamente.Rotación, traducción y escalado simultáneos del mapa de bits en el lienzo de Android
Esto es lo que quiero lograr: 1.
girar alrededor del centro de la pantalla
2. Escala de salir de la misma parte del cuadro en el centro
3. Pan al punto deseado en el cuadro
Esto es lo que está sucediendo realmente con el código de abajo: 1. Rotación
funciona como está previsto, en torno al centro de la pantalla
2. obras de escala, pero las escalas alrededor del centro de la imagen
3. La traducción sólo funciona como está previsto si angle
es cero, de lo contrario se está moviendo en una dirección equivocada
// the center of the view port
float centerX = screen.right/2;
float centerY = screen.bottom/2;
Matrix m = new Matrix();
m.preRotate(angle, centerX, centerY);
m.preScale(mScaleFactor, mScaleFactor, centerX, centerY);
// scaling the amount of translation,
// rotating the translation here gave crazy results
float x = mPosX/mScaleFactor;
float y = mPosY/mScaleFactor;
m.preTranslate(x, y);
canvas.drawBitmap(pic, m, null);
Si traduzco primero, y luego girar, la traducción funciona como está previsto, pero la rotación no está cerca del centro de el puerto de vista más.
¿Cómo puedo aplicar las tres transformaciones, sin que se influencien entre sí?
Girar la traducción parece compensar la rotación, pero también tengo la sensación de que esto es lo que necesito re. Las matrices de Android son 3x3, ¿así que supongo que ya son transformaciones afines? – modemuser
¿Entonces tal vez intente configurar la matriz directamente en lugar de usar esos métodos preRotate, preScale? Por lo tanto, su matriz debe ser algo así como la edición en la publicación anterior – Dan
Con esta matriz, la panoramización funciona, pero la escala también rota la imagen, la rotación también escala la imagen y la rotación ocurre alrededor de una esquina de la imagen. Es como whac-a-mole, pero gracias por tu aporte. – modemuser