Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

188
Vistas
¿Por qué el método postRotate () cambia la dirección del eje X?

Estoy tratando de reflejar una pegatina dibujada como esta.

Pegatina original ---------- Pegatina reflejada

 ↓ ↓
 public void reflectCurrentSticker(int windowWidth) { // Y // ----|----- x // | //creation of the cloned sticker //getWidth() == width of the FrameLayout (where the stickers drawn) Matrix originalMatrix = getReflectedMatrix(getWidth(), originalSticker); addSticker(clonedSticker); clonedSticker.setMatrix(originalMatrix); invalidate(); } public Matrix getReflectedMatrix(int wrapperWidth, Sticker sticker) { Matrix matrix = sticker.getMatrix(); float transX = getMatrixValue(matrix, 2); float transY = getMatrixValue(matrix, 5); float newX = (((float) wrapperWidth) - transX) - ((float) sticker.getCurrentWidth()); float currentAngle = sticker.getCurrentAngle(); float currentScale = sticker.getCurrentScale(); Matrix newMatrix = new Matrix(); newMatrix.postRotate(currentAngle); newMatrix.postScale(currentScale, currentScale); newMatrix.postTranslate(newX, transY); return newMatrix; } public float getMatrixValue(@NonNull Matrix matrix, @IntRange(from = 0, to = 9) int valueIndex) { final float[] matrixValues = new float[9]; matrix.getValues(matrixValues); return matrixValues[valueIndex]; }

Mi código funciona bien, pero el problema comienza cuando giro la etiqueta original e intento crear una etiqueta reflejada a partir de ella. Desafortunadamente, obtuve esto, la etiqueta reflejada colocada en el lugar incorrecto, con el ángulo de rotación incorrecto.

Pegatina original -- Pegatina reflejada

 ↓ ↓

La salida esperada es:

Pegatina original ---------- Pegatina reflejada

 ↓ ↓
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

¿Por qué el método postRotate() cambia la dirección del eje X?

Puede parecer que lo es, no lo es. En primer lugar, debe comprender que las operaciones de translate() , rotate() y screw() requieren un punto de pivote. El punto de pivote se encuentra en la parte superior izquierda de cualquier imagen/mapa de bits. En segundo lugar, Android siempre gira una imagen/mapa de bits en el sentido de las agujas del reloj y no en el sentido contrario. Si desea girarlo en sentido contrario a las agujas del reloj, puede negar el ángulo ei 90 a -90 , pero no se recomienda, ya que podría causar errores. Más bien 360 - angle - 180 . Entonces, esto es probablemente lo que querías.

 newMatrix.postScale(-currentScale, currentScale); newMatrix.postTranslate(sticker.getCurrentWidth, transY); newMatrix.postRotate(360 - currentAngle - 180);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda