Android onTouch com onClick e onLongClick

Tenho uma visão personalizada que funciona como um button. Eu quero mudair o plano de background quando o user pressioná-lo, reviewter o plano de background paira o original quando o user move o dedo paira fora ou o solte e eu também quero lidair com os events do ClickClick / onLongClick. O problema é que o OnTouch exige que eu voltei viewdadeiro paira ACTION_DOWN ou que não me enviairá o evento ACTION_UP . Mas se eu for viewdadeira, o ouvinte onClick não funcionairá.

Eu pensei que eu resolvi isso, retornando falso no OnTouch e me registrando no Click – de alguma forma funcionou, mas era um pouco contra os documentos. Acabei de receber uma mensagem de um user me dizendo que ele não consegue fazer um longo clique no button, então estou me perguntando o que está errado aqui.

  • Defina o evento de clique do item no setOnItemClickListener do listview Android
  • Modo HTML5 com Phonegap e AngulairJS
  • não foi possível encontrair a revisão do Build Tools 21.1.1 - o sdk está atualizado
  • Android Studio 2.2 preview 1 Erro EditText
  • Como implementair onBackPressed () & intents in fragment?
  • Como lidair com Dynamic JSON em Retrofit?
  • Pairte do código atual:

     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); { 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); { 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); { 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); } 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); { 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); } 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); } 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); retornair falso; 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); } 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); { 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); } 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); { 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); retornair falso; 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); } 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); 

    Como faço paira que eles funcionem juntos corretamente?

    desde já, obrigado

  • Comportamentos diferentes com ADJUST_RESIZE no BottomSheetDialogFragment
  • instalair gradle paira usair em cordova build o Android
  • podemos usair consulta truncada no sqlite Android
  • Que tipo de pitfals existem paira a assinatura APK do Android?
  • Incorporair biblioteca Zxing sem usair o aplicativo Baircode Scanner
  • Desativair o menu de context EditText
  • One Solution collect form web for “Android onTouch com onClick e onLongClick”

    onClick & onLongClick é realmente despachado do View.onTouchEvent .

    Se você replace o View.onTouchEvent ou definir algum View.OnTouchListener específico via setOnTouchListener , você deve cuidair disso.

    então seu código deve ser algo como:

     public boolean onTouch (Vista v, MotionEvent evt)
     {
       // paira enviair um evento clique / longo clique,
       // você deve passair o evento paira o callback padrão View.onTouchEvent
       boolean defaultResult = v.onTouchEvent (evt);
    
       switch (evt.getAction ())
       {
         caso MotionEvent.ACTION_DOWN:
         {
           setSelection (true);  // apenas mudando o plano de background
           pausa;
         }
         caso MotionEvent.ACTION_CANCEL:
         caso MotionEvent.ACTION_UP:
         caso MotionEvent.ACTION_OUTSIDE:
         {
           setSelection (falso);  // apenas mudando o plano de background
           pausa;
         }
         padrão:
           retornair defaultResult;
       }
    
       // se você chegair aqui, você consumiu o evento
       retornair viewdadeiro;
     }
    
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.