Appliquer la conception matérielle Touch Ripple à ImageButton?

J’ai un bouton d’image qui ne répond pas avec une animation tactile quand il est cliqué parce que c’est une image statique contrairement aux boutons réguliers sur la sucette qui viennent avec l’effet d’ondulation intégré. Je voudrais append l’effet tactile d’ondulation à l’image, mais je n’arrive pas à le trouver. 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 conservez une image de couverture d’album dans Google Play Music et qu’une ondulation d’ombre se déplace sur l’image.

Pour un résultat encore meilleur:

 

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

  

J’ai eu de bonnes réponses de iShadrin ( ici ) et Nicolars ( ici ).

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

FWIW, je ne sais pas pourquoi l’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 le thème de l’application = android:Theme.Material ?).

La chose étrange qui se passait est que, bien que l’effet d’ondulation ait été montré, il était en train de délimiter ImageButton, donc la solution est la suivante:

  • Pour utiliser l’ android:foreground="?android:attr/selectableItemBackgroundBorderless" au lieu d’ android:background="?android:attr/selectableItemBackgroundBorderless"

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

Ou bien, si vous ciblez API 21+, utilisez backgroundTint :