Rotar de forma programable o dibujar
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/your_drawable" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360" />
Quiero rotar programaticamente el dibujable.
¿Cómo debo hacer eso?
- Rotar ImageView en Android <Nivel de API 11
- Cómo rotar vistas sobre el cambio de orientación sin volver a crear el diseño?
- OCR (tesseract), rotación inteligente para la imagen
- Android lo que debe ser punto de pivote para girar la imagen alrededor de su centro de la base
- Metadatos de rotación de vídeo Mp4
Aquí está mi devolución de llamada
private class RotateListener implements RotateGestureDetector.OnRotateGestureListener{ @Override public boolean onRotate(MotionEvent event1, MotionEvent event2, double deltaAngle) { return true; } }
El deltaangle
no más de 0.1, no estoy seguro de cuál es el valor del extracto.
- Imagen fuera de límites después de la transformación en la vista
- Cómo girar un icono de Android en su punto central?
- ¿Cuál es la ventaja de dejar que una actividad sea destruida en rotación?
- Android: orientación de la vista previa de la cámara en modo vertical
- Cómo girar cuatro sprites al foco de estos sprites
- Rotar diseño de trama que contiene botones dinámicos
- Cómo rotar un dibujable por ObjectAnimator?
- Android: screenOrientation = "sensorPortrait" no funciona en API +17
El código siguiente gira un ImageView alrededor de su centro:
ImageView myImageView = (ImageView)findViewById(R.id.my_imageview); AnimationSet animSet = new AnimationSet(true); animSet.setInterpolator(new DecelerateInterpolator()); animSet.setFillAfter(true); animSet.setFillEnabled(true); final RotateAnimation animRotate = new RotateAnimation(0.0f, -90.0f, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f); animRotate.setDuration(1500); animRotate.setFillAfter(true); animSet.addAnimation(animRotate); myImageView.startAnimation(animSet);
Aquí está una buena solución para poner un dibujado giratorio para una imageView:
Drawable getRotateDrawable(final Bitmap b, final float angle) { final BitmapDrawable drawable = new BitmapDrawable(getResources(), b) { @Override public void draw(final Canvas canvas) { canvas.save(); canvas.rotate(angle, b.getWidth() / 2, b.getHeight() / 2); super.draw(canvas); canvas.restore(); } }; return drawable; }
uso:
Bitmap b=... float angle=... final Drawable rotatedDrawable = getRotateDrawable(b,angle); root.setImageDrawable(rotatedDrawable);
Otra alternativa:
private Drawable getRotateDrawable(final Drawable d, final float angle) { final Drawable[] arD = { d }; return new LayerDrawable(arD) { @Override public void draw(final Canvas canvas) { canvas.save(); canvas.rotate(angle, d.getBounds().width() / 2, d.getBounds().height() / 2); super.draw(canvas); canvas.restore(); } }; }
También, si desea girar el mapa de bits, pero miedo de OOM, puede utilizar una solución NDK he hecho aquí
Puesto que usted está intentando utilizar los Detectores de Gestos Android de Almero, decidí hacer lo mismo para encontrar una solución apropiada:
public class MainActivity extends Activity { private RotateGestureDetector mRotateDetector; private float mRotationDegrees = 0.f; private static final float ROTATION_RATIO = 2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRotateDetector = new RotateGestureDetector(getApplicationContext(), new RotateListener()); } @Override public boolean onTouchEvent(MotionEvent event) { mRotateDetector.onTouchEvent(event); return super.onTouchEvent(event); } private class RotateListener extends RotateGestureDetector.SimpleOnRotateGestureListener { @Override public boolean onRotate(RotateGestureDetector detector) { mRotationDegrees -= detector.getRotationDegreesDelta(); ImageView v = (ImageView) findViewById(R.id.imageView); // For NineOldAndroids library only! ViewHelper.setRotation(v, mRotationDegrees * ROTATION_RATIO); // For HONEYCOMB and later only! v.setRotation(mRotationDegrees * ROTATION_RATIO); return true; } } }
Funciona bien para mí (soy capaz de girar el ImageView con gesto de rotación de dos dedos NOTA: No se olvide de elegir la llamada de método de rotación adecuada.Comenté a ambos para llamar su atención.
ROTATION_RATIO es sólo un multiplicador para acelerar una respuesta de rotación en el movimiento de mis dedos. Puede utilizar cualquier eje de rotación (setRotation (), setRotationX () y setRotationY ()) métodos para una vista.
Para habilitar el soporte de este código en dispositivos Android con nivel de API inferior a 11 (dispositivos pre-Honeycomb), puede acoplar la biblioteca NineOldAndroid.
- Acceso a @android: id / list ListView desde el código
- En la aplicación Unity android, cómo recibir contenido de un servicio de una biblioteca de android con referencia