Saya membuat aplikasi, dengan sumber daya yang dapat digunakan kembali (karena tombol selalu sama, tetapi dicerminkan atau diputar). Saya ingin menggunakan sumber daya yang sama jadi saya tidak perlu menambahkan 3 sumber daya lagi yang persis seperti aslinya tetapi dirotasi. Tetapi saya juga tidak ingin mencampurkan kode dengan hal-hal yang dapat dideklarasikan dalam XML atau membuat transformasi dengan matriks yang akan memakan waktu pemrosesan.
Saya memiliki tombol dua status yang dideklarasikan dalam 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>
dan saya ingin menggunakan kembali drawable karena akan sama tetapi diputar 90º dan 45º dan saya tetapkan ke tombol sebagai 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" />
Saya tahu bahwa saya dapat memutarnya dengan a RotateDrawable
atau dengan a Matrix
tetapi seperti yang sudah saya jelaskan, saya tidak suka pendekatan itu.
Apakah mungkin untuk mencapai itu secara langsung di XML atau menurut Anda apa yang akan menjadi cara terbaik untuk melakukannya? Taruh semua sumber daya kecuali dirotasi, putar dalam kode?
--- EDIT --- Jawaban @dmaxi berfungsi dengan baik, ini adalah cara menggabungkannya dengan daftar item :)
<?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>
sumber
Jawaban:
Saya bisa memutar dalam XML:
Itu
fromDegrees
penting.Pada dasarnya ini adalah animasi putar yang didefinisikan dalam XML. Dengan
fromDegrees
Anda menentukan status rotasi awal. InitoDegrees
adalah status pemutaran terakhir drawable dalam urutan animasi, tetapi bisa berupa apa saja jika Anda tidak ingin menggunakan animasi.Saya tidak berpikir itu mengalokasikan sumber daya untuk animasi karena tidak harus dimuat sebagai animasi. Sebagai drawable, ia dirender sebagai keadaan awalnya dan harus diletakkan di
drawable
folder sumber daya. Untuk menggunakannya sebagai animasi, Anda harus meletakkannya dianim
folder resource dan dapat memulai animasi seperti ini (hanya contoh):sumber
Saya bisa memutar panah kiri ke kanan dalam XML sebagai:
Gambar terlampir untuk referensi.
sumber
Jika drawable berbasis vektor digunakan, terkait dengan ImageView , gaya, dan daftar status warna, tombol Anda dapat difaktor ulang sebagai berikut:
Catatan: Vector drawable secara signifikan lebih kecil daripada gambar, jadi definisi ekstra eksplisit tidak menimbulkan banyak overhead, dan membuat kode yang jelas dan eksplisit (meskipun saya telah membaca bahwa memodifikasi tangan aset vektor harus dihindari, saya lebih suka berurusan dengan overhead memperbarui beberapa file daripada memiliki transformasi pada satu):
Catatan: Android Studio adalah sumber yang bagus untuk aset vektor.
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 diubah)
sumber
rotationGroup
atributnya, ini memutar vektor dengan sangat baikJika Anda ingin
rotation
berlaku untuk masaxml
berkas add kemudian sederhanaandroid:rotation="180"
diImageView
sumber