web-dev-qa-db-fra.com

Comment puis-je donner un effet de clic imageview comme un bouton sur Android?

J'ai dans mon application Android une imageview que j'utilise comme un bouton avec l'événement onClick indiqué, mais comme vous pouvez le deviner, l'imageview ne produit pas d'effet cliquable lorsque vous cliquez dessus. Comment puis-je y arriver?

76
Burak Dede

Vous pouvez concevoir différentes images pour les états sur lesquels vous avez cliqué/non cliqué et les définir dans onTouchListener comme suit

final ImageView v = (ImageView) findViewById(R.id.button0);
        v.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View arg0, MotionEvent arg1) {
                switch (arg1.getAction()) {
                case MotionEvent.ACTION_DOWN: {
                    v.setImageBitmap(res.getDrawable(R.drawable.img_down));
                    break;
                }
                case MotionEvent.ACTION_CANCEL:{
                    v.setImageBitmap(res.getDrawable(R.drawable.img_up));
                    break;
                }
                }
                return true;
            }
        });

Le meilleur choix est que vous définissiez un sélecteur comme suit

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_selected="true"   
        Android:drawable="@drawable/img_down" />
    <item Android:state_selected="false"   
        Android:drawable="@drawable/img_up" />
</selector>

et sélectionnez l'image dans l'événement:

v.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View arg0, MotionEvent arg1) {
                v.setSelected(arg1.getAction()==MotionEvent.ACTION_DOWN);
                return true;
            }
        });
51
Martin Booka Weser

Vous pouvez le faire avec une seule image en utilisant quelque chose comme ceci:

     //get the image view
    ImageView imageView = (ImageView)findViewById(R.id.ImageView);

    //set the ontouch listener
    imageView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN: {
                    ImageView view = (ImageView) v;
                    //overlay is black with transparency of 0x77 (119)
                    view.getDrawable().setColorFilter(0x77000000,PorterDuff.Mode.SRC_ATOP);
                    view.invalidate();
                    break;
                }
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL: {
                    ImageView view = (ImageView) v;
                    //clear the overlay
                    view.getDrawable().clearColorFilter();
                    view.invalidate();
                    break;
                }
            }

            return false;
        }
    });

Je vais probablement en faire une sous-classe de ImageView (ou ImageButton, car il s'agit également d'une sous-classe de ImageView) pour une réutilisation plus facile, mais cela devrait vous permettre d'appliquer un aspect "sélectionné" à une image.

71
Mr Zorn

Il est possible de faire avec un seul fichier image en utilisant la méthode ColorFilter. Cependant, ColorFilter s'attend à utiliser ImageViews et non des boutons, vous devez donc transformer vos boutons en ImageViews. Ce n'est pas un problème si vous utilisez des images comme boutons de toute façon, mais c'est plus gênant si vous aviez du texte ... Quoi qu'il en soit, supposons que vous trouviez une solution au problème avec le texte, voici le code à utiliser:

ImageView button = (ImageView) findViewById(R.id.button);
button.setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);

Cela applique une incrustation rouge au bouton (le code de couleur est le code hexadécimal pour le rouge parfaitement opaque - les deux premiers chiffres sont en transparence, puis il s'agit de RR GG BB.).

43
AZ_

EDIT: bien que la réponse originale ci-dessous fonctionne et soit facile à configurer, reportez-vous à this post par un développeur développeur de Google chez Google si vous souhaitez/avez besoin d'une implémentation plus efficace. Notez également que l'attribut Android:foreground est venant à toutes les vues , y compris ImageView, par défaut dans Android M.


Le problème avec l'utilisation d'un sélecteur pour ImageView est que vous ne pouvez le définir que comme arrière-plan de la vue - tant que votre image est opaque, vous ne verrez pas l'effet du sélecteur derrière celle-ci.

L'astuce consiste à envelopper votre ImageView dans un FrameLayout avec l'attribut Android:foreground , ce qui nous permet de définir un superposition _ pour son contenu. Si nous définissons Android:foreground sur un sélecteur (par exemple .?android:attr/selectableItemBackground pour l'API de niveau 11+) et si nous associons la OnClickListener à FrameLayout au lieu de ImageView, l'image sera superposée avec l'attrayant de notre sélecteur - l'effet de clic souhaité

Voir:

<FrameLayout
    Android:id="@+id/imageButton"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:foreground="?android:attr/selectableItemBackground" >

    <ImageView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:src="@drawable/yourImageFile" />

</FrameLayout>

(Notez que cela devrait être placé dans votre mise en page parent.)

final View imageButton = findViewById(R.id.imageButton);
imageButton.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View view) {
        // do whatever we wish!
    }
});
38
justasm

Utilisez style = "? Android: borderlessButtonStyle" dans le fichier XML. Il montrera l'effet de clic par défaut d'Android. 

<ImageView
    Android:id="@+id/imageView1"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:src="@drawable/ic_launcher" 
    style="?android:borderlessButtonStyle"
/>
24
Anjula

Il suffit simplement d'utiliser un ImageButton .

21
kcoppock

Voici mon moyen simple de résoudre ce problème:

ImageView iv = (ImageView) findViewById(R.id.imageView);

iv.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        //Agrega porcentajes de cada fraccion de grafica pastel

        Animation animFadein = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.fade_in);

        iv.startAnimation(animFadein);
    });

Dans le fichier res/anim/fade_in.xml:

<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:Android="http://schemas.Android.com/apk/res/Android"
         Android:fillAfter="true" >

<alpha
    Android:duration="100"
    Android:fromAlpha="0.0"
    Android:interpolator="@Android:anim/accelerate_interpolator"
    Android:toAlpha="1.0" />
 </set>
13
Oscar Josue Alvrez

Pour définir le choix sélectionnable sélectionnable

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_selected="true"   
        Android:drawable="@drawable/img_down" />
    <item Android:state_selected="false"   
        Android:drawable="@drawable/img_up" />
</selector>

Je dois utiliser Android: state_pressed au lieu d'Android: state_selected

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_pressed ="true"   
        Android:drawable="@drawable/img_down" />
    <item Android:state_pressed ="false"   
        Android:drawable="@drawable/img_up" />
</selector>
6
worawee.s

Définissez l’arrière-plan sélectionnable sur ImageView et ajoutez un peu de remplissage. Puis attachez la OnClickListener.

<ImageView
    Android:id="@+id/your_image_view"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:src="@drawable/your_image"
    Android:padding="10dp"
    Android:background="?android:attr/selectableItemBackground"/>
6
Oliver Kranz

Basé sur La réponse de M. Zorn , j'utilise une méthode statique dans ma classe d'utilitaires abstraite:

public abstract class Utility {
...

    public static View.OnTouchListener imgPress(){
        return imgPress(0x77eeddff); //DEFAULT color
    }

    public static View.OnTouchListener imgPress(final int color){
        return new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch(event.getAction()) {

                    case MotionEvent.ACTION_DOWN: {
                        ImageView view = (ImageView) v;
                        view.getDrawable().setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
                        view.invalidate();
                        break;
                    }

                    case MotionEvent.ACTION_UP:
                        v.performClick();

                    case MotionEvent.ACTION_CANCEL: {
                        ImageView view = (ImageView) v;

                        //Clear the overlay
                        view.getDrawable().clearColorFilter();
                        view.invalidate();
                        break;
                    }
                }

                return true;
            }
        };
    }

    ...
}

Ensuite, je l'utilise avec onTouchListener:

ImageView img=(ImageView) view.findViewById(R.id.image);
img.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) { /* Your click action */ }
});
img_zc.setOnTouchListener(Utility.imgPress()); //Or Utility.imgPress(int_color_with_alpha)

C'est très simple si vous avez beaucoup d'images et que vous voulez un simple effet onTouch, sans XML dessinable et une seule image.

4
neoteknic

Je fais des choses similaires Convient pour vous ou non

Voir la presse Effet Helper:

  • utilisation: faire un effet de presse simple comme iOS

    Utilisation simple: 

  • ImageView img = (ImageView) findViewById (R.id.img);

  • VoirPressEffectHelper.attach (img)

https://Gist.github.com/extralam/7489370

4
Ah Lam

Vous pouvez remplacer setPressed dans ImageView et y filtrer la couleur au lieu de créer des écouteurs onTouchEvent: 

@Override
public void setPressed(boolean pressed) {
    super.setPressed(pressed);

    if(getDrawable() == null)
        return;

    if(pressed) {
        getDrawable().setColorFilter(0x44000000, PorterDuff.Mode.SRC_ATOP);
        invalidate();
    }
    else {
        getDrawable().clearColorFilter();
        invalidate();
    }
}
4
ono

En combinaison avec toutes les réponses ci-dessus, je souhaitais que ImageView soit pressé et change d'état, mais si l'utilisateur le déplaçait, "annuler" et ne pas exécuter onClickListener.

J'ai fini par créer un objet Point dans la classe et définir ses coordonnées en fonction du moment où l'utilisateur appuyait sur ImageView. Sur MotionEvent.ACTION_UP, j'enregistre un nouveau point et compare les points.

Je ne peux que l'expliquer si bien, mais voici ce que j'ai fait.

// set the ontouch listener
weatherView.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // Determine what action with a switch statement
        switch (event.getAction()) {

        // User presses down on the ImageView, record the original point
        // and set the color filter
        case MotionEvent.ACTION_DOWN: {
            ImageView view = (ImageView) v;

            // overlay is black with transparency of 0x77 (119)
            view.getDrawable().setColorFilter(0x77000000,
                    PorterDuff.Mode.SRC_ATOP);
            view.invalidate();

            p = new Point((int) event.getX(), (int) event.getY());
            break;
        }

        // Once the user releases, record new point then compare the
        // difference, if within a certain range perform onCLick
        // and or otherwise clear the color filter
        case MotionEvent.ACTION_UP: {
            ImageView view = (ImageView) v;
            Point f = new Point((int) event.getX(), (int) event.getY());
            if ((Math.abs(f.x - p.x) < 15)
                    && ((Math.abs(f.x - p.x) < 15))) {
                view.performClick();
            }
            // clear the overlay
            view.getDrawable().clearColorFilter();
            view.invalidate();
            break;
        }
        }
        return true;
    }
});

J'ai un onClickListener défini sur le imageView, mais cela peut être une méthode.

4
samschwartz96

Vous pouvez essayer avec Android:background="@Android:drawable/list_selector_background" d'obtenir le même effet que "Ajouter une alarme" dans le paramètre par défaut "Réveil" (maintenant Horloge de bureau).

4
Marco Bettiol

Cela a fonctionné pour moi:

img.setOnTouchListener(new OnTouchListener(){

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction())
                {
                    case MotionEvent.ACTION_DOWN:
                    {
                        ((ImageView)v).setImageAlpha(200);
                        break;
                    }
                    case MotionEvent.ACTION_MOVE:
                    {
                        // if inside bounds
                        if(event.getX() > 0 && event.getX() < v.getWidth() && event.getY() > 0 && event.getY() < v.getHeight())
                        {
                            ((ImageView)v).setImageAlpha(200);
                        }
                        else
                        {
                            ((ImageView)v).setImageAlpha(255);
                        }

                        break;
                    }
                    case MotionEvent.ACTION_UP:
                    {
                        ((ImageView)v).setImageAlpha(255);
                    }
                }
                return true;
            }

        });

@Edit: Comme Gunhan l'a dit, la méthode setImageAlpha posera problème. J'ai utilisé cette méthode:

public static void setImageAlpha(ImageView img, int alpha)
    {
        if(Build.VERSION.SDK_INT > 15)
        {
            img.setImageAlpha(alpha);
        }
        else
        {
            img.setAlpha(alpha);
        }
    }
4
altosh

Je crée un échantillon ici , il suffit de changer ImageView en ClickableImageView à partir de votre mise en page. J'espère que ça vous aidera. 

enter image description here

3
thanhbinh84

Utilisez un Android.widget.Button et définissez sa propriété background sur Android.graphics.drawable.StateListDrawable. Tout cela peut être fait en XML ou par programme. Voir la section Bouton personnalisé du didacticiel Form Stuff

3
Ozone

J'ai une solution plus esthétique si vous utilisez des images d'arrière-plan :)

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

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

OU:

Vous pouvez utiliser ce formulaire avec Image Button.

Créer le fichier res/drawable/btn_video.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@drawable/image"
        Android:state_pressed="true" />
    <item Android:drawable="@drawable/ico2"
        Android:state_focused="true" />
    <item Android:drawable="@drawable/ico2" />
</selector>

Et res/layout/activity_main.xml:

<ImageButton
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:id="@+id/imageButton"
    Android:layout_gravity="center_horizontal"
    Android:onClick="eventImageBtn"
    Android:background="@drawable/btn_video"
    Android:adjustViewBounds="true"
    Android:scaleType="fitXY"
/>

Votre image change en un clic, et vous pouvez ajuster avec une disposition linéaire:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fillViewport="true">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical"
        Android:background="@color/menu_item_background">

        <LinearLayout Android:layout_width="match_parent" Android:layout_height="match_parent" Android:orientation="vertical"
                      Android:paddingLeft="@dimen/main_screen_side_padding" Android:paddingRight="@dimen/main_screen_side_padding" Android:paddingTop="@dimen/main_screen_side_padding" Android:paddingBottom="@dimen/main_screen_side_padding"
                      Android:background="#ffb3ff13" Android:weightSum="10.00">


            <LinearLayout Android:layout_weight="2.50" Android:background="#ff56cfcd" Android:orientation="vertical" Android:layout_width="fill_parent" Android:layout_height="0dp" >

                <ImageButton
                    Android:layout_width="match_parent"
                    Android:layout_height="match_parent"
                    Android:id="@+id/imageButton"
                    Android:layout_gravity="center_horizontal"
                    Android:onClick="eventImageBtn"
                    Android:background="@drawable/btn_video"
                    Android:adjustViewBounds="true"
                    Android:scaleType="fitXY"
                />
            </LinearLayout>

            <LinearLayout Android:layout_weight="0.50" Android:layout_height="0dp" Android:background="#ffffffff" Android:orientation="vertical" Android:layout_width="fill_parent" >
            </LinearLayout>

            <LinearLayout Android:layout_weight="4.50" Android:orientation="vertical" Android:layout_width="fill_parent" Android:layout_height="0dp" Android:background="#ff8aa5ff">
            </LinearLayout>

            <LinearLayout Android:layout_weight="0.50" Android:layout_height="0dp" Android:background="#ffffffff" Android:orientation="vertical" Android:layout_width="fill_parent" >
            </LinearLayout>

            <LinearLayout Android:layout_weight="2.00" Android:orientation="vertical" Android:layout_width="fill_parent" Android:layout_height="0dp" Android:background="#ffff7d1a" >
            </LinearLayout>

        </LinearLayout>
    </LinearLayout>
</ScrollView>
2
Alex Zaraos

J'ai essayé avec:

<ImageButton
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:contentDescription="@string/get_started"
        Android:src="@drawable/home_started"
        style="?android:borderlessButtonStyle"
        Android:adjustViewBounds="true"
        Android:clickable="true"
        Android:elevation="5dp"
        Android:longClickable="true" />

et cela a fonctionné. Veuillez noter sur la ligne: style="?android:borderlessButtonStyle"

1
aviit

Si vous voulez une ondulation lorsque vous appuyez dessus, cela peut être donné par ce code:

<ImageView
    ...
    Android:background="?attr/selectableItemBackgroundBorderless"
    Android:clickable="true"
    ...
</ImageView>

De même, vous pouvez implémenter un effet de clic pour TextView

<TextView
    ...
    Android:background="?attr/selectableItemBackgroundBorderless"
    Android:clickable="true"
    ...
</TextView>
1
npk

Merci pour l'aide sur ce fil. Cependant, vous avez oublié une chose ... vous devez également gérer ACTION_CANCEL. Sinon, vous risquez de ne pas restaurer correctement la valeur alpha de ImageView dans le cas où une vue parent dans la hiérarchie des vues intercepte un événement tactile (imaginez une ScrollView vous enveloppant ImageView).

Voici une classe complète basée sur la classe ci-dessus, mais prenant également en compte ACTION_CANCEL. Il utilise une classe d'assistance ImageViewCompat pour résumer les différences dans l'API JellyBean pré-post.

public class ChangeAlphaOnPressedTouchListener implements OnTouchListener {

    private final float pressedAlpha;

    public ChangeAlphaOnPressedTouchListener(float pressedAlpha) {
        this.pressedAlpha = pressedAlpha;
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        ImageView iv = (ImageView) v;
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            ImageViewCompat.setAlpha(iv, pressedAlpha);
            break;

        case MotionEvent.ACTION_MOVE:
            if (isInsideViewBounds(v, event)) {
                ImageViewCompat.setAlpha(iv, pressedAlpha);
            } else {
                ImageViewCompat.setAlpha(iv, 1f);
            }
            break;
        case MotionEvent.ACTION_UP:
            ImageViewCompat.setAlpha(iv, 1f);
            break;
        case MotionEvent.ACTION_CANCEL:
            ImageViewCompat.setAlpha(iv, 1f);
        }
        return false;
    }

    private static boolean isInsideViewBounds(View v, MotionEvent event) {
        return event.getX() > 0 && event.getX() < v.getWidth() && event.getY() > 0
                && event.getY() < v.getHeight();
    }
}
1
Matt Accola

C'est la meilleure solution que j'ai jamais vue. C'est plus générique

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:Android="http://schemas.Android.com/apk/res/Android"
         Android:fillAfter="true" >

<alpha
    Android:duration="100"
    Android:fromAlpha="0.0"
    Android:interpolator="@Android:anim/accelerate_interpolator"
    Android:toAlpha="1.0" />
 </set>
1
Nilesh

Je pense que le moyen le plus simple est de créer un nouveau fichier XML. Dans ce cas, appelons-le "exemple.xml" dans le dossier pouvant être dessiné et insérons le code suivant:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@color/blue"
          Android:state_pressed="true" />

</selector>

Mais avant cela, vous devez définir les couleurs dans le fichier colors.xml, dans le dossier de valeurs, comme ceci:

<resources>
    <color name="blue">#0000FF</color>
</resources>

Cela fait, vous venez de définir le bouton/ImageButton pour utiliser la nouvelle disposition, comme ceci:

<ImageView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:background="@drawable/example"
/>

Ensuite, lorsque vous cliquez sur cette image, elle passe à la couleur définie dans

<item Android:drawable="@color/blue"
      Android:state_pressed="true" />

donner le retour que vous voulez ...

1
Lima Neto

Je pense que ImageButton est une meilleure solution

<ImageButton
    Android:layout_width="96dp"
    Android:layout_height="56dp"
    Android:src="@mipmap/ic_launcher"
    Android:adjustViewBounds="true"
    Android:background="@Android:color/transparent"
    Android:foreground="@drawable/selector" />
1
Dan Alboteanu

Voici ma solution, qui, en utilisant la bibliothèque " nineOldAndroids ", prend également en charge les anciennes API:

rootView.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(final View v, final MotionEvent event) {

        switch (event.getAction()) {

            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                v.setBackgroundResource(R.drawable.listview_normal);
                ViewHelper.setAlpha(imageView, 1);
                break;

            case MotionEvent.ACTION_DOWN:
                v.setBackgroundResource(0);
                v.setBackgroundColor(getResources().getColor(R.color.listview_pressed));
                ViewHelper.setAlpha(imageView, 0.75f);
                break;
        }
        return false;
    }
});

Il suppose que rootView est la cellule elle-même (la mise en page) et qu'il possède une seule imageView que vous souhaitez affecter par la couleur que vous souhaitez appliquer à la cellule entière.


EDIT: si vous le souhaitez, vous pouvez également étendre ImageView pour gérer le premier plan et le définir sur "? Android: attr/selectableItemBackground". Il existe une bibliothèque pour ceci ici et un tutoriel sur la façon de le faire pour la vue de votre choix, ici .

1
android developer

Voici mon code. L'idée est que ImageView obtient un filtre de couleur lorsque l'utilisateur le touche, et le filtre de couleur est supprimé lorsque l'utilisateur cesse de le toucher.

Martin Booka Weser, András, Ah Lam, altosh, la solution ne fonctionne pas lorsque ImageView a également onClickEvent . Worawee.s et kcoppock (avec ImageButton) nécessite un arrière-plan, ce qui n’a aucun sens si ImageView n’est pas transparent.

Celui-ci est une extension de AZ_ idée sur le filtre de couleur.

class PressedEffectStateListDrawable extends StateListDrawable {

    private int selectionColor;

    public PressedEffectStateListDrawable(Drawable drawable, int selectionColor) {
        super();
        this.selectionColor = selectionColor;
        addState(new int[] { Android.R.attr.state_pressed }, drawable);
        addState(new int[] {}, drawable);
    }

    @Override
    protected boolean onStateChange(int[] states) {
        boolean isStatePressedInArray = false;
        for (int state : states) {
            if (state == Android.R.attr.state_pressed) {
                isStatePressedInArray = true;
            }
        }
        if (isStatePressedInArray) {
            super.setColorFilter(selectionColor, PorterDuff.Mode.MULTIPLY);
        } else {
            super.clearColorFilter();
        }
        return super.onStateChange(states);
    }

    @Override
    public boolean isStateful() {
        return true;
    }
}

usage:

Drawable drawable = new FastBitmapDrawable(bm);
imageView.setImageDrawable(new PressedEffectStateListDrawable(drawable, 0xFF33b5e5));
1
Malachiasz

Ajoutez simplement l'attribut XML, Android: clickable = "true" ...

0
Sandipkumar Savani

J'ai fait comme suit en XML - avec 0 padding autour de l'image et ondulation ontop de l'image:

<ImageView
    Android:layout_width="100dp"
    Android:layout_height="100dp"
    Android:background="@drawable/my_image"
    Android:clickable="true"
    Android:focusable="true"
    Android:src="?android:attr/selectableItemBackground" />
0
Someone Somewhere