Cómo girar una vista en Android

Tengo un botón que quiero poner en un ángulo de 45 grados. Por alguna razón no puedo conseguir que esto funcione.

¿Puede alguien proporcionar el código para lograr esto?

Podría crear una animación y aplicarla a su vista de botón. Por ejemplo:

// Locate view ImageView diskView = (ImageView) findViewById(R.id.imageView3); // Create an animation instance Animation an = new RotateAnimation(0.0f, 360.0f, pivotX, pivotY); // Set the animation's parameters an.setDuration(10000); // duration in ms an.setRepeatCount(0); // -1 = infinite repeated an.setRepeatMode(Animation.REVERSE); // reverses each repeat an.setFillAfter(true); // keep rotation after animation // Aply animation to image view diskView.setAnimation(an); 

API 11 agregó un método setRotation () a todas las vistas.

Amplíe la clase TextView y anule el método onDraw() . Asegúrese de que la vista de padre es lo suficientemente grande para manejar el botón girado sin recortarlo.

 @Override protected void onDraw(Canvas canvas) { canvas.save(); canvas.rotate(45,<appropriate x pivot value>,<appropriate y pivot value>); super.onDraw(canvas); canvas.restore(); } 

Acabo de usar la línea simple en mi código y funciona:

 myCusstomView.setRotation(45); 

Espero que funcione para ti.

La aplicación de una animación de rotación (sin duración, por lo tanto sin efecto de animación) es una solución más sencilla que llamar a View.setRotation () o sustituir el método View.onDraw.

 // substitude deltaDegrees for whatever you want RotateAnimation rotate = new RotateAnimation(0f, deltaDegrees, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // prevents View from restoring to original direction. rotate.setFillAfter(true); someButton.startAnimation(rotate); 

Una línea en XML


 <View android:rotation="45" ... /> 

Joininig @ Rudi y @ Pete respuestas. He creado una RotateAnimation que mantiene la funcionalidad de los botones también después de la rotación.

El método setRotation () preserva la funcionalidad de los botones.

Ejemplo de código:

 Animation an = new RotateAnimation(0.0f, 180.0f, mainLayout.getWidth()/2, mainLayout.getHeight()/2); an.setDuration(1000); an.setRepeatCount(0); an.setFillAfter(false); // DO NOT keep rotation after animation an.setFillEnabled(true); // Make smooth ending of Animation an.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) {} @Override public void onAnimationRepeat(Animation animation) {} @Override public void onAnimationEnd(Animation animation) { mainLayout.setRotation(180.0f); // Make instant rotation when Animation is finished } }); mainLayout.startAnimation(an); 

MainLayout es un campo (LinearLayout)

La vista rotativa con rotate() no afectará al tamaño medido de la vista. Sólo se ve afectada la representación de la vista y, como resultado, la vista giratoria la hará recortar o no encajar en la disposición principal. Esta biblioteca lo arregla sin embargo:

https://github.com/rongi/rotate-layout

Introduzca aquí la descripción de la imagen

@ La respuesta de Ichorus es correcta para las vistas, pero si desea dibujar rectángulos girados o texto, puede hacer lo siguiente en su devolución de llamada onDraw (o onDispatchDraw) para su vista:

(Nota que theta es el ángulo desde el eje x de la rotación deseada, pivote es el punto que representa el punto alrededor del cual queremos que el rectángulo gire, y horizontalRect es la posición del rect "antes" de que se girara)

 canvas.save(); canvas.rotate(theta, pivot.x, pivot.y); canvas.drawRect(horizontalRect, paint); canvas.restore(); 
  • ¿Es posible cambiar el textcolor en un Android SearchView?
  • Android: uso de la vista personalizada en el widget
  • Android superponer una vista ontop de todo?
  • Iniciar actividad con SearchView abierto
  • Android: Obtiene el elemento listview del botón que se hace clic en la vista de lista personalizada
  • Cómo eliminar el fondo de una vista (normal) (Android)
  • Escala adaptarse a contenido web móvil utilizando meta tag de vista
  • ¿Es posible comprobar si una "TAB" específica en TabWidget está visible en la vista actual o no?
  • Cómo traer una vista al frente sin llamar bringToFront ()?
  • Retrasar la llamada a onQueryTextChange () en SearchView.OnQueryTextListener con SearchView
  • Ver paginador androide con imagen de fondo único
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.