Ich erstelle eine App mit Ressourcen, die wiederverwendet werden können (da Schaltflächen immer gleich sind, aber gespiegelt oder gedreht werden). Ich möchte dieselbe Ressource verwenden, damit ich nicht drei weitere Ressourcen hinzufügen muss, die genau dem Original entsprechen, aber gedreht sind. Ich möchte den Code aber auch nicht mit Dingen mischen, die im XML deklariert werden können, oder Transformationen mit einer Matrix durchführen, die Verarbeitungszeit kostet.
Ich habe eine Schaltfläche mit zwei Status in einem XML deklariert.
<?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>
und ich möchte das Zeichenelement wiederverwenden, da es das gleiche ist, aber um 90 ° und 45 ° gedreht wird, und ich ordne den Knopf als Zeichenelement zu.
<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" />
Ich weiß, dass ich es mit einem RotateDrawable
oder mit einem drehen kann, Matrix
aber wie ich bereits erklärt habe, mag ich diesen Ansatz nicht.
Ist es möglich, dies direkt im XML zu erreichen, oder was ist Ihrer Meinung nach der beste Weg, dies zu tun? Alle Ressourcen außer gedreht setzen, im Code drehen?
--- BEARBEITEN --- Die Antwort von @dmaxi funktioniert hervorragend, so kombiniert man sie mit einer Artikelliste :)
<?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>
quelle
Antworten:
Ich könnte in XML drehen :
Das
fromDegrees
ist wichtig.Grundsätzlich ist dies eine in XML definierte Rotationsanimation. Mit
fromDegrees
definieren Sie den anfänglichen gedrehten Zustand. DastoDegrees
ist der letzte gedrehten Zustand des ziehbar in der Animationssequenz , sondern kann alles sein , wenn Sie Animation nicht verwenden möchten.Ich denke nicht, dass es Ressourcen für Animationen zuweist, da es nicht als Animation geladen werden muss. Als Zeichen wird es als Ausgangszustand gerendert und sollte im
drawable
Ressourcenordner abgelegt werden . Um es als Animation zu verwenden, sollten Sie es in einenanim
Ressourcenordner legen und können die Animation wie folgt starten (nur ein Beispiel):quelle
Ich könnte den Pfeil nach links in XML wie folgt drehen:
Beigefügtes Bild als Referenz.
quelle
Wenn vektorbasierte Zeichen in Verbindung mit einer ImageView- , Stil- und Farbstatusliste verwendet werden, kann Ihre Schaltfläche wie folgt umgestaltet werden:
Hinweis: Vektorzeichnungen sind erheblich kleiner als Bilder, daher verursachen zusätzliche explizite Definitionen keinen großen Aufwand und sorgen für klaren, expliziten Code (obwohl ich gelesen habe, dass manuelle Änderungen an Vektor-Assets vermieden werden sollten, würde ich mich lieber damit befassen der Aufwand für die Aktualisierung einiger Dateien als für Transformationen in einer):
Hinweis: Android Studio ist eine großartige Quelle für Vektor-Assets.
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 geändert)
quelle
rotationGroup
Wenn Sie möchten ,
rotation
in drawablexml
Datei dann einfach addandroid:rotation="180"
inImageView
quelle