web-dev-qa-db-fra.com

Bouton de capture libération dans Android

Est-il possible de capturer la libération d'un bouton tout comme nous capturons un clic en utilisant onClickListener() et OnClick()?

Je souhaite augmenter la taille d'un bouton lorsqu'il est enfoncé et le ramener à sa taille d'origine lorsque le clic est relâché. Quelqu'un peut-il m'aider comment faire cela?

27
mdv

Vous devez définir un OnTouchListener sur votre bouton.

button.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            increaseSize();
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            resetSize();
        }
    }
};
49
Eric Nordvik

Vous devez également gérer MotionEvent.ACTION_CANCEL. Donc le code sera:

button.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP || 
            event.getAction() == MotionEvent.ACTION_CANCEL) {
            increaseSize();
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            resetSize();
        }
    }
};
3
icastell

utilisez plutôt OnTouchListener ou OnKeyListener.

2
kiki

Vous pourrez peut-être faire cela en remplaçant les onKeyDown et onKeyUp. Ce sont tous deux hérités de Android.widget.TextView. S'il vous plaît voir le Android.widget.Button doc pour (un peu) plus d'infos.

1
Michael Banzon

Eric Nordvik a la bonne réponse sauf que

event.getAction() == MotionEvent.ACTION_UP

jamais été exécuté pour moi. Au lieu de cela, j'ai mis en œuvre

    button.setOnClickListener(new OnClickListener() {
        @Override
        public boolean onClick(View v) {
            resetSize();      
    }
};

pour la touche ACTION_UP.

0
Mams