Tôi đang tạo một ứng dụng, với các tài nguyên có thể được sử dụng lại (vì các nút luôn giống nhau, nhưng được sao chép hoặc xoay). Tôi muốn sử dụng cùng một tài nguyên vì vậy tôi không phải thêm 3 tài nguyên khác giống hệt như ban đầu nhưng được xoay vòng. Nhưng tôi cũng không muốn trộn mã với những thứ có thể được khai báo trong XML hoặc thực hiện các phép biến đổi với ma trận sẽ tốn thời gian xử lý.
Tôi có một nút hai trạng thái được khai báo trong một 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>
và tôi muốn sử dụng lại cái có thể vẽ được vì nó sẽ giống nhau nhưng được xoay 90º và 45º và tôi gán cho nút là có thể vẽ được.
<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" />
Tôi biết rằng tôi có thể xoay nó bằng a RotateDrawable
hoặc bằng a Matrix
nhưng như tôi đã giải thích, tôi không thích cách tiếp cận đó.
Có thể đạt được điều đó trực tiếp trên XML không hay cách tốt nhất để làm điều đó là gì? Đặt tất cả các tài nguyên nhưng xoay vòng, xoay chúng trong mã?
--- EDIT --- Câu trả lời của @dmaxi hoạt động tuyệt vời, đây là cách kết hợp nó với một danh sách mục :)
<?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>