How can I give an imageview click effect like a button on Android?

前端 未结 30 2083
情歌与酒
情歌与酒 2020-11-28 01:50

I have imageview in my Android app that I am using like a button with the onClick event given, but as you might guess it is not giving imageview a clickable effect when clic

相关标签:
30条回答
  • 2020-11-28 02:14

    You can Override setPressed in the ImageView and do the color filtering there, instead of creating onTouchEvent listeners:

    @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();
        }
    }
    
    0 讨论(0)
  • Based on Mr Zorn's answer, I use a static method in my abstract Utility class:

    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;
                }
            };
        }
    
        ...
    }
    

    Then I use it with 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)
    

    It is very simple if you have a lot of images, and you want a simple onTouch effect, without any XML drawable and only one image.

    0 讨论(0)
  • 2020-11-28 02:15

    Use an android.widget.Button, and set its background property to an android.graphics.drawable.StateListDrawable. This can all be done in XML, or programmatically. See the Custom Button section of the Form Stuff tutorial.

    0 讨论(0)
  • 2020-11-28 02:16

    Here is my simple way to solve that:

    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);
        });
    

    In file 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>
    
    0 讨论(0)
  • 2020-11-28 02:17

    I create sample here, just change ImageView into ClickableImageView from your layout. Hope it help.

    0 讨论(0)
  • 2020-11-28 02:17

    I think the easiest way is creating a new XML file. In this case, let's call it "example.xml" in the drawable folder, and put in the follow code:

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

    But before that you have to set the colors in the colors.xml file, in the values folder, like this:

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

    That made, you just set the Button / ImageButton to use the new layout, like this:

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

    Then when you click that image, it will change to the color set in

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

    giving the feedback that you want...

    0 讨论(0)
提交回复
热议问题