Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to rotate a drawable in the xml description?

I am creating an app, with resources that can be reused (because buttons are always the same, but mirrored or rotated). I do want to use the same resource so I don't have to add 3 more resources that are exactly like the original but rotated. But I also don't want to mix the code with things that can be declared in the XML or make transformations with a matrix that will cost processing time.

I've got a two state button declared in an 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> 

and I want to reuse the drawable because it will be the same but rotated 90º and 45º and I assign to the button as a drawable.

<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" /> 

I know that I can rotate it with a RotateDrawable or with a Matrix but as I already explained I don't like that approach.

Is it possible to achieve that directly on the XML or what do you think that will be the best way to do it? Put all resources but rotated, rotate them in the code?

--- EDIT --- The answer of @dmaxi works great, this is how to combine it with an item list :)

<?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> 
like image 377
Goofyahead Avatar asked Jan 03 '12 17:01

Goofyahead


People also ask

What is XML drawable?

A drawable resource is a general concept for a graphic that can be drawn to the screen and which you can retrieve with APIs such as getDrawable(int) or apply to another XML resource with attributes such as android:drawable and android:icon . There are several different types of drawables: Bitmap File.

How do I add an image to a drawable XML file?

Step 1: In this method first of all in your system find your required images and copy the image as we do normally. Step 2: Then open the Android Studio go to the app > res > drawable > right-click > Paste as shown in the below figure. Step 3: Then a pop-up screen will arise like below.


1 Answers

I could rotate in 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> 

The fromDegrees is important.

Basically this is a rotate animation defined in XML. With fromDegrees you define the initial rotated state. The toDegrees is the final rotated state of the drawable in the animation sequence but can be anything if you don't want to use animation.

I don't think it allocates resources for animation as it doesn't have to be loaded as animation. As a drawable it is rendered as it's initial state and should be put in the drawable resource folder. To use it as an animation you should put it in anim resource folder and can start the animation like this (just an example):

Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotation); rotation.setRepeatCount(Animation.INFINITE); myView.startAnimation(rotation); 
like image 175
dmaxi Avatar answered Sep 24 '22 02:09

dmaxi