2012-01-03 19 views
59

Estoy creando una aplicación, con recursos que se pueden reutilizar (porque los botones son siempre los mismos, pero se duplican o giran). Sí quiero usar el mismo recurso, así que no tengo que agregar 3 recursos más que sean exactamente iguales al original pero rotados. Pero tampoco quiero mezclar el código con cosas que pueden declararse en el XML o realizar transformaciones con una matriz que costará tiempo de procesamiento.¿Es posible rotar un dibujo en la descripción xml?

Tengo un botón de dos estados declarado en un XML.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:drawable="@drawable/and_card_details_button_down_left_onclick" /> <!-- pressed --> 
    <item android:drawable="@drawable/and_card_details_button_down_left" /> <!-- default --> 
</selector> 

y desea volver a utilizar el dibujable porque va a ser el mismo, pero girado 90º y 45º y asignar al botón como estirable.

<Button android:id="@+id/Details_Buttons_Top_Left_Button" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@drawable/details_menu_large_button" /> 

sé que puedo girarlo con un RotateDrawable o con un Matrix pero como ya he explicado que no me gusta ese enfoque.

¿Es posible lograr eso directamente en el XML o cuál cree que será la mejor manera de hacerlo? ¿Poner todos los recursos pero rotados, rotarlos en el código?

--- --- EDITAR La respuesta de @dmaxi funciona muy bien, esta es la forma de combinar con una lista de elementos :)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true"> 
     <rotate 
     android:fromDegrees="90" 
     android:toDegrees="90" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:drawable="@drawable/and_card_details_button_up_onclick"/> 
    </item> 

    <item> 
     <rotate 
     android:fromDegrees="90" 
     android:toDegrees="90" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:drawable="@drawable/and_card_details_button_up_onclick"/> 
    </item> 

</selector> 
+4

No hay necesidad de pedir perdón a su Inglés es muy bien. Y bienvenido a SO! – PeeHaa

+0

busca el mismo problema en este hilo http://stackoverflow.com/questions/14727426/andriod-how-to-create-the-stack-kind-of-image-backgrounds ¡cualquier sugerencia sería genial! – sukarno

Respuesta

82

pude rotate en XML:

<?xml version="1.0" encoding="utf-8"?> 
<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
     android:fromDegrees="90" 
     android:toDegrees="90" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:drawable="@drawable/mainmenu_background"> 
</rotate> 

El fromDegrees es importante.

Básicamente esta es una animación de rotación definida en XML. Con fromDegrees, define el estado inicial girado. El toDegrees es el estado girado final del dibujante en la secuencia de animación, pero puede ser cualquier cosa si no desea utilizar la animación.

No creo que asigne recursos para la animación, ya que no tiene que cargarse como animación. Como dibujable, se representa como su estado inicial y debe colocarse en la carpeta de recursos drawable. utilizarlo como una animación que debe ponerlo en la carpeta de recursos anim y puede iniciar la animación como esto (es un ejemplo):

Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotation); 
rotation.setRepeatCount(Animation.INFINITE); 
myView.startAnimation(rotation); 
+1

¡Gracias perfecto! Combiné eso con el artículo y es exactamente lo que necesito, quiero publicar el código, no sé si es mejor editar tu respuesta o mi pregunta ... Y para duplicar la imagen, tengo que jugar con pivote xy y? – Goofyahead

+0

Bueno, estoy feliz de poder ayudar, edite la respuesta si lo desea. pivotX y pivotY definen el punto central de la rotación. Para la creación de reflejos no tengo idea porque este XML solo puede definir la rotación 2D. – dmaxi

+1

@dmaxi Esto está girando el dibujable a través de una animación de rotación ¿no? ¿No sería eso algo ineficiente? – starkej2

14

pude girar la flecha izquierda justo en XML como:

<?xml version="1.0" encoding="utf-8"?> 
<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromDegrees="180" 
    android:toDegrees="0" 
    android:drawable="@drawable/left"> 
</rotate> 

Imagen adjunta para referencia.

enter image description here

Cuestiones relacionadas