vista studio sirve que propiedades para libreria example clase addview android view rotation

studio - Girar una vista en Android



que es vista en android (9)

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

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


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

myCusstomView.setRotation(45);

Espero que funcione para ti.


Aplicar una animación de rotación (sin duración, por lo tanto sin efecto de animación) es una solución más simple que llamar a View.setRotation () o anular 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);


Extienda la clase TextView y anule el método onDraw() . Asegúrese de que la vista principal sea lo suficientemente grande como 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(); }



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

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

canvas.save(); canvas.rotate(theta, pivot.x, pivot.y); canvas.drawRect(horizontalRect, paint); canvas.restore();


La vista giratoria con rotate() no afectará el tamaño medido de su vista. Como resultado, la vista girada se recortará o no se ajustará al diseño principal. Esta biblioteca lo solucionó:

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


Puede 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);


Respuestas de Joininig @ Rudi y @ Pete. Creé un 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.

Muestra 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)


Una línea en XML

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