Подтвердить что ты не робот

Можно ли повернуть выделение в описании xml?

Я создаю приложение с ресурсами, которые можно использовать повторно (потому что кнопки всегда одни и те же, но зеркальные или повернутые). Я хочу использовать один и тот же ресурс, поэтому мне не нужно добавлять еще 3 ресурса, которые точно так же, как оригинал, но повернуты. Но я также не хочу смешивать код с вещами, которые могут быть объявлены в XML или сделать преобразования с матрицей, которая будет стоить время обработки.

У меня есть кнопка состояния, объявленная в 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>

и я хочу повторно использовать drawable, потому что он будет таким же, но повернут на 90º и 45º, и я назначу кнопке в качестве переносимого.

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

Я знаю, что могу повернуть его с помощью RotateDrawable или с помощью Matrix, но, как я уже объяснил, мне не нравится этот подход.

Можно ли достичь этого непосредственно на XML или как вы думаете, что это лучший способ сделать это? Поместите все ресурсы, но поверните их, поверните их в коде?

--- EDIT --- Ответ @dmaxi отлично работает, вот как его сочетать с списком элементов:)

<?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>
4b9b3361

Ответ 1

Я мог rotate в 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>

Важно fromDegrees.

В основном это анимация вращения, определенная в XML. С помощью fromDegrees вы определяете начальное повернутое состояние. toDegrees - это конечное повернутое состояние вытягиваемого в анимационной последовательности, но может быть любым, если вы не хотите использовать анимацию.

Я не думаю, что он выделяет ресурсы для анимации, так как он не должен быть загружен как анимация. В качестве переносимого он отображается как исходное состояние и должен быть помещен в папку ресурсов drawable. Чтобы использовать его в качестве анимации, вы должны поместить его в папку anim resource и можете запустить анимацию, как это (просто пример):

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

Ответ 2

Я мог бы вращать левую стрелку справа в XML как:

<?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>

Прикрепленное изображение для справки.

введите описание изображения здесь