Я создаю приложение с ресурсами, которые можно использовать повторно (потому что кнопки всегда одинаковы, но зеркально отражены или повернуты). Я хочу использовать тот же ресурс, поэтому мне не нужно добавлять еще 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>
и я хочу повторно использовать объект для рисования, потому что он будет таким же, но повернутым на 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 или как вы думаете, что будет лучшим способом сделать это? Поместить все ресурсы, но повернуты, повернуть их в коде?
--- РЕДАКТИРОВАТЬ --- Ответ @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>
Ответы:
Я мог вращать в XML:
Это
fromDegrees
важно.По сути, это анимация поворота, определенная в XML. С помощью
fromDegrees
вы определяете начальное повернутое состояние. ВtoDegrees
последнее повернутое состояние рисованного объекта в последовательности анимации, но может быть любым, если вы не хотите использовать анимацию.Я не думаю, что он выделяет ресурсы для анимации, поскольку ее не нужно загружать как анимацию. Как доступный для рисования он отображается в исходном состоянии и должен быть помещен в
drawable
папку ресурсов. Чтобы использовать его в качестве анимации, вы должны поместить его вanim
папку ресурсов и запустить анимацию следующим образом (просто пример):источник
Я мог повернуть стрелку влево вправо в XML как:
Прикрепленное изображение для справки.
источник
Если используются векторные чертежи, в сочетании с ImageView , стиля и цвета государственного списка, ваша кнопка может быть переработан следующим образом :
Примечание: векторные чертежи значительно меньше изображений, поэтому дополнительные явные определения не влекут за собой больших накладных расходов и создают ясный, явный код (хотя я читал, что ручного изменения векторных ресурсов следует избегать, я бы предпочел иметь дело с накладные расходы на обновление пары файлов, чем на преобразование одного):
Примечание. Android Studio - отличный источник векторных ресурсов.
res \ values \ styles.xml
res \ color \ button_csl.xml
details_menu_large_button.xml
Details_Buttons_Top_Left_Button
and_card_details_button_down_left.xml (ic_play_arrow_black_24dp.xml)
and_card_details_button_down_left_onclick.xml (ic_play_arrow_black_24dp.xml изменен)
источник
rotationGroup
атрибута, он очень хорошо вращает векторЕсли вы хотите
rotation
вытяжку вxml
файл , то просто ономandroid:rotation="180"
вImageView
источник