Gire la vista de disposición de androide sobre su centro usando el oyente táctil
Aquí es cómo mi configuración para girar se ve.
- Compatibilidad con la versión de la API de Android
- Calcular la matriz de rotación utilizando el acelerómetro
- Android: girar un ImageView con el dedo mueve otras vistas alrededor
- Rotación inexplicable de la cámara Android en la captura de algunos dispositivos (no en EXIF)
- Android layout-land y manejo de rotación de pantalla
Estoy escuchando la acción hacia abajo y me muevo en el icono de rotación, tratando de calcular el ángulo de rotación y aplicar ese ángulo de rotación a la disposición entera que encapsula el edittext. La rotación aplicada tiene que ser alrededor del centro de encapsular el diseño relativo.
Aquí es cómo estoy tratando de lograr esto, en el TouchListener para icono de rotación.
if(v == ivRotateSticker){ //TODO grab xc and yc using (top and bottom)/2 and (left and right)/2 to grab center of sticker after each rotation final float x = event.getX(); final float y = event.getY(); rlTextStickerLayout.getGlobalVisibleRect(myViewRect); xc = myViewRect.width()/2; yc = myViewRect.height()/2; dx = scaleReceiver.getWidth() - myViewRect.width(); dy = scaleReceiver.getHeight() - myViewRect.height(); leftBound = scaleReceiver.getX(); topBound = scaleReceiver.getY(); switch (event.getAction()){ case MotionEvent.ACTION_DOWN: mViewAngle = rlTextStickerLayout.getRotation(); mPrevAngle = Math.toDegrees(Math.atan2(x - xc, yc - y)); break; case MotionEvent.ACTION_MOVE: Log.d("EventRegistered", " " + event.getRawX() + "--" + dx + " -- " + dy); mCurrAngle = Math.toDegrees(Math.atan2(x - xc, yc - y)); if (x >= leftBound && y >= topBound && x <= dx && y <= dy) { float rot = (float) (mViewAngle + mCurrAngle - mPrevAngle); rlTextStickerLayout.setRotation((float) (mViewAngle + mCurrAngle - mPrevAngle)); Log.d("stickerRotation"," "+rot); } break; } return true; }
Pero la rotación resultante es glitchy y no como deseado suave. Además, si muevo la etiqueta a un lugar diferente, ¿cómo puedo actualizar el nuevo centro para la rotación, ya que la rotación después de mover la etiqueta cambia drásticamente el centro de rotación. ¿Cómo puedo lograr una rotación mucho más suave?
- Obtener el valor de rotación de matriz en android?
- Android cómo girar lienzo rect
- Rotar imagen sin encogerse en Android
- El diseño de la vista no se actualiza en el cambio de orientación en android
- Rotación de ImageView desde el archivo xml de diseño
- Android: Rotación de la imagen alrededor del centro
- Android: Desactiva la rotación de la pantalla cuando la pantalla sea más pequeña que x
- ¿Cómo obtener el valor de zoom de la matriz arbitraria?
-
La rotación de la vista se animará a los valores especificados (90, 180, 270) en 1000ms:
View.animate (). Rotation (90f) .setDuration (1000) .start (); View.animate (). Rotation (180f) .setDuration (1000) .start (); View.animate (). Rotation (270f) .setDuration (1000) .start ();
-
Utilizando esta biblioteca puede rotar toda la jerarquía de vistas https://github.com/rongi/rotate-layout