Android onTouch avec onClick et onLongClick

J'ai une vue personnalisée qui agit comme un bouton. Je veux changer l'arrière-plan lorsque l'utilisateur presse, de revenir de l'arrière-plan d'origine lorsque l'utilisateur déplace le doigt à l'extérieur ou en libérer, et je tiens également à gérer onClick/onLongClick événements. Le problème est que onTouch m'oblige à retourner true pour ACTION_DOWN ou de ne pas m'envoyer de l' ACTION_UP événement. Mais si je retourne true, le onClick écouteur ne fonctionne pas.

J'ai pensé que je l'ai résolu en renvoyant false dans onTouch et l'enregistrement onClick - il en quelque sorte travaillé, mais était plutôt à l'encontre de la documentation. Je viens de recevoir un message d'un utilisateur me disant qu'il n'est pas en mesure de long-cliquez sur le bouton, alors je me demandais quel est le problème ici.

Partie de l'actuel code:

public boolean onTouch(View v, MotionEvent evt)
{
  switch (evt.getAction())
  {
    case MotionEvent.ACTION_DOWN:
    {
      setSelection(true); //it just change the background
      break;
    }

    case MotionEvent.ACTION_CANCEL:
    case MotionEvent.ACTION_UP:
    case MotionEvent.ACTION_OUTSIDE:
    {
      setSelection(false); //it just change the background
      break;
    }
  }

  return false;
}

public void onClick(View v)
{
  //some other code here
}

public boolean onLongClick(View view)
  {
    //just showing a Toast here
    return false;
  }


//somewhere else in code
setOnTouchListener(this);
setOnClickListener(this);
setOnLongClickListener(this);

Comment puis-je les faire travailler ensemble correctement?

Merci d'avance

OriginalL'auteur Sebastian Nowak | 2011-09-12