views:

35

answers:

3

I want to create an event to change what my image button looks like, but only when it is being pushed down. So far I have been using an onTouch listener, but that just changes it permanently. I can't find anything like an onKyeUpListener() type of thing for the button.

Does anything like this exist?

SOLVED

    final ImageButton button = (ImageButton) findViewById(R.id.ImageButton01);

    button.setOnTouchListener(new View.OnTouchListener() {

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

            if(event.getAction() == (MotionEvent.ACTION_UP)){
                //Do whatever you want after press
            }
            else{
                //Do whatever you want during press
            }
            return true;
        }
    });
+2  A: 

From http://developer.android.com/guide/topics/ui/ui-events.html:

onTouch() ... This is called when the user performs an action qualified as a touch event, including a press, a release, or any movement gesture on the screen (within the bounds of the item).

In other words, onTouch is also called for release events. Look at MotionEvent.getAction().

Laurence Gonsalves
Perfect. Thank you. I will accept this answer in 4 mins.
TehGoose
This solution is overkill as compared with using a StateListDrawable (as EboMike mentions).
Christopher
Or Daniel. In fact, Daniel even added a link. I would have accepted his answer instead. Doing it manually in onTouch is overkill and totally unreliable. What if the user selects your button with the trackball?
EboMike
Yeah, I answered the lower-level question of detecting release events, but for the higher level question of choosing a different image for different states, the other two answers are better. Since this question is really more about the high-level issue, I agree that the other answers are more correct. Unfortunately, SO won't let me delete my answer as it's been accepted.
Laurence Gonsalves
+2  A: 

It's in the docs. You can define different images for different states via XML.

Daniel
+2  A: 

Instead of doing it manually, why don't you change the drawable of your buttons? In general, drawables can have multiple states, so if you change the drawable for certain states (like focused or selected), the operating system will handle everything for you automatically.

EboMike