Sur l'application de numérotation d'Android, lorsque vous commencez à rechercher quelque chose et que vous cliquez sur le bouton fléché à gauche de l'EditText, vous obtenez un effet d'entraînement circulaire:
J'ai essayé de l'avoir aussi, mais j'en ai un rectangulaire:
<ImageButton
Android:id="@+id/navButton"
Android:layout_width="40dp"
Android:layout_height="40dp"
Android:layout_gravity="center_vertical"
Android:layout_marginLeft="8dp"
Android:background="?android:attr/selectableItemBackground"
Android:src="@drawable/search_ic_back_arrow"/>
Comment faire en sorte que le bouton ait un effet d'entraînement circulaire lorsqu'on clique dessus? Dois-je créer un nouveau dessin ou y a-t-il un moyen intégré pour cela?
Si vous avez déjà une image d’arrière-plan, voici un exemple d’ondulation ressemblant beaucoup à selectableItemBackgroundBorderless:
<ImageButton
Android:id="@+id/btn_show_filter_dialog"
Android:layout_width="24dp"
Android:layout_height="24dp"
Android:background="@drawable/ic_filter_state"/>
ic_filter_state.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:state_pressed="true"
Android:state_enabled="true"
Android:drawable="@drawable/state_pressed_ripple"/>
<item
Android:state_enabled="true"
Android:drawable="@drawable/ic_filter" />
</selector>
state_pressed_ripple.xml: (opacité définie sur 10% sur fond blanc) 1AFFFFFF
<?xml version="1.0" encoding="UTF-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="oval">
<solid Android:color="#1AFFFFFF"/>
</shape>
<color Android:color="#FFF"/>
</item>
</ripple>
Si vous utilisez le thème AppCompat, vous pouvez définir l'arrière-plan de la vue comme suit:
Android:background="?selectableItemBackgroundBorderless"
Cela ajoutera une ondulation circulaire à partir de 21 ans et un fond carré en dessous de 21 ans.
Un autre attribut avec effet d’ondulation rond, spécialement pour la barre d’action:
Android:background="?actionBarItemBackground"
UPD: La couleur d'ondulation peut être modifiée par cet attribut:
<!--somewhere in styles-->
<item name="colorControlHighlight">your_color_here</item>
Mais gardez à l’esprit, cet attribut s’applique à tous les effets d’ondulation par défaut.
Créez et définissez une ondulation pouvant être dessinée en arrière-plan. Quelque chose comme ça.
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="@color/grey_15">
<item Android:id="@Android:id/mask">
<shape Android:shape="oval">
<solid Android:color="?android:colorPrimary"/>
</shape>
<color Android:color="@color/white"/>
</item>
</ripple>
Vous pouvez créer une ondulation circulaire en utilisant l'attribut Android:radius
au format XML.
Exemple:
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="your_color"
Android:radius="your_radius" />
Faites attention, votre your_radius
devrait être inférieur à votre largeur de vue et à votre hauteur. Par exemple: si vous avez une vue de taille 60dp x 60dp
your_radius
devrait être proche de 30dp
(largeur/2 ou hauteur/2).
Travaillez sur Android 5.0 et versions ultérieures.
Ajoutez simplement ce fond à votre vue "Android:background=?android:attr/actionBarItemBackground"
Si vous voulez des fichiers XML plus génériques, j'ai deux fichiers:
1) btn_ripple_background avec le code:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:state_pressed="true"
Android:state_enabled="true"
Android:drawable="@drawable/ripple_circular_shape"/>
</selector>
2) ripple_circuler_shape avec le code:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="@color/btn_state_pressed_text_color"
Android:shape="oval">
<solid Android:color="@color/btn_state_pressed_text_color" />
</shape>
enfin l'utilisation: Android:foreground="@drawable/ripple_btn_background"