Je crée une application, avec des ressources qui peuvent être réutilisées (car les boutons sont toujours les mêmes, mais en miroir ou en rotation). Je souhaite utiliser la même ressource afin de ne pas avoir à ajouter 3 autres ressources qui sont exactement comme l'original mais pivotées. Mais je ne veux pas non plus mélanger le code avec des choses qui peuvent être déclarées dans le XML ou faire des transformations avec une matrice qui coûtera du temps de traitement.
J'ai un bouton à deux états déclaré dans un 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>
et je veux réutiliser le dessinable car il sera le même mais tourné de 90 ° et 45 ° et j'assigne le bouton comme dessinable.
<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" />
Je sais que je peux le faire pivoter avec un RotateDrawable
ou avec un Matrix
mais comme je l'ai déjà expliqué, je n'aime pas cette approche.
Est-il possible d'y parvenir directement sur le XML ou quelle sera selon vous la meilleure façon de le faire? Mettre toutes les ressources mais en rotation, les faire pivoter dans le code?
--- EDIT --- La réponse de @dmaxi fonctionne très bien, voici comment la combiner avec une liste d'articles :)
<?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>
la source
Réponses:
Je pourrais tourner en XML:
Le
fromDegrees
est important.Il s'agit essentiellement d'une animation de rotation définie en XML. Avec
fromDegrees
vous définissez l'état de rotation initial. LetoDegrees
est l'état de rotation final du dessinable dans la séquence d'animation, mais peut être n'importe quoi si vous ne souhaitez pas utiliser d'animation.Je ne pense pas qu'il alloue des ressources pour l'animation car il ne doit pas être chargé en tant qu'animation. En tant que dessinable, il est rendu dans son état initial et doit être placé dans le
drawable
dossier de ressources. Pour l'utiliser comme animation, vous devez le mettre dans leanim
dossier de ressources et pouvez démarrer l'animation comme ceci (juste un exemple):la source
Je pourrais faire pivoter la flèche gauche vers la droite dans XML comme:
Image jointe pour référence.
la source
Si des dessins vectoriels sont utilisés, en conjonction avec une liste ImageView , style et état de couleur, votre bouton peut être refactoré comme suit:
Remarque: les dessins vectoriels sont nettement plus petits que les images, donc les définitions supplémentaires et explicites n'entraînent pas beaucoup de frais généraux et permettent un code clair et explicite (même si j'ai lu que la modification manuelle des actifs vectoriels devrait être évitée, je préfère traiter avec la surcharge de mettre à jour quelques fichiers que d'avoir des transformations sur un):
Remarque: Android Studio est une excellente source d'actifs vectoriels.
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 modifié)
la source
rotationGroup
attribut, il fait très bien tourner le vecteurSi vous voulez
rotation
étirables dans lexml
fichier , puis ajouter simplementandroid:rotation="180"
dansImageView
la source