131 votes

Comment définir l'effet de clic sur le bouton dans Android ?

Sous Android, lorsque je définis une image d'arrière-plan sur un bouton, je ne vois aucun effet sur celui-ci lorsque l'on clique dessus.

J'ai besoin de définir un effet sur le bouton, afin que l'utilisateur puisse reconnaître que le bouton est cliqué.

Le bouton doit être sombre pendant quelques secondes lorsqu'il est cliqué. Comment faire cela ?

95voto

András Points 479

C'est plus simple lorsque vous avez beaucoup de boutons d'image et que vous ne voulez pas écrire des xml-s pour chaque bouton.

Version Kotlin :

 fun buttonEffect(button: View) {
    button.setOnTouchListener { v, event ->
        when (event.action) {
            MotionEvent.ACTION_DOWN -> {
                v.background.setColorFilter(-0x1f0b8adf, PorterDuff.Mode.SRC_ATOP)
                v.invalidate()
            }
            MotionEvent.ACTION_UP -> {
                v.background.clearColorFilter()
                v.invalidate()
            }
        }
        false
    }
}

Version Java :

 public static void buttonEffect(View button){
    button.setOnTouchListener(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN: {
                    v.getBackground().setColorFilter(0xe0f47521,PorterDuff.Mode.SRC_ATOP);
                    v.invalidate();
                    break;
                }
                case MotionEvent.ACTION_UP: {
                    v.getBackground().clearColorFilter();
                    v.invalidate();
                    break;
                }
            }
            return false;
        }
    });
}

93voto

Créez votre objet AlphaAnimation qui décide de l'ampleur de l'effet de fondu du bouton, puis laissez-le commencer dans le onClickListener de vos boutons

Par example :

 private AlphaAnimation buttonClick = new AlphaAnimation(1F, 0.8F);

// some code

public void onClick(View v) {
    v.startAnimation(buttonClick);
}

bien sûr c'est juste un moyen, pas le plus préféré, c'est juste plus facile

93voto

Francis Novotný Points 317

Vous pouvez simplement utiliser le premier plan pour votre View pour obtenir un effet cliquable :

 android:foreground="?android:attr/selectableItemBackground"

Pour une utilisation avec un thème sombre, ajoutez également un thème à votre layout (pour que l'effet cliquable soit clair) :

 android:theme="@android:style/ThemeOverlay.Material.Dark"

27voto

Ely Dantas Points 377

Pour rendre votre élément cohérent avec l'apparence du système, essayez de faire référence à l'attribut système android:attr/selectableItemBackground dans la balise d'arrière-plan ou de premier plan de votre vue :

 <ImageView
    ...
    android:background="?android:attr/selectableItemBackground"      
    android:foreground="?android:attr/selectableItemBackground"
    ...
/>

Utilisez les deux attributs pour obtenir l'effet souhaité avant/après le niveau API 23 respectivement.

https://stackoverflow.com/a/11513474/4683601

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X