Search code examples
javaandroidbuttonimageview

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


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 clicked. How can I achieve that?


Solution

  • You can design different images for clicked/not clicked states and set them in the onTouchListener as follows

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

    The better choice is that you define a selector as follows

    <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>
    

    and select the image in the event:

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