web-dev-qa-db-fra.com

Appliquer des ondulations tactiles Material Design à ImageButton?

J'ai un imagebutton qui ne répond pas par une animation tactile lorsque l'utilisateur clique dessus, car il s'agit d'une image statique, contrairement aux boutons normaux de Lollipop, qui sont livrés avec l'effet d'entraînement intégré. J'aimerais ajouter l'effet tactile de conception matérielle à l'image, mais je n'arrive pas à trouver le moyen de le mettre en œuvre. Je peux définir un filtre de couleur sur l'image, mais ce n'est pas l'effet d'entraînement. Un exemple de ce que j'essaie de faire est lorsque vous maintenez une image de couverture d'album dans Google Play Musique et qu'une ondulation d'ombre se déplace sur l'image.

78
sanic

Pour un résultat encore meilleur:

<ImageButton
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:src="@Android:drawable/ic_button"
    Android:background="?attr/selectableItemBackgroundBorderless"
/>
218
i.shadrin

Vous pouvez simplement ajouter un arrière-plan à votre ImageButton comme ceci:

<ImageButton
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:src="@Android:drawable/btn_dialog"
    Android:background="?android:attr/selectableItemBackground" />
22
Nicolas

I.shadrin ( ici ) et Nicolars ( ici ) m'ont donné de bonnes réponses.

La différence entre leurs réponses est que ?attr/selectableItemBackgroundBorderless peut vous donner un Android.view.InflateException, alors le ?android:attr/selectableItemBackground est la solution.

FWIW, je ne sais pas pourquoi cette exception se produit, car la première réponse a bien fonctionné dans tous mes anciens projets, mais pas dans mon projet récent (peut-être parce que l’application theme = Android:Theme.Material?.

La chose étrange qui se passait est que, bien que l'effet d'entraînement ait été démontré, il dépassait le ImageButton. La solution est donc la suivante:

  • Pour utiliser le Android:foreground="?android:attr/selectableItemBackgroundBorderless" au lieu de Android:background="?android:attr/selectableItemBackgroundBorderless"

J'espère que cela vous aidera si vous faites face à la même chose.

4
Filipe Brito