2017-01-30 3 views
0

Я хочу вызвать определенные события при двойном нажатии TextView.Применить двойной кран на textview не работает

final GestureDetector gestureDetector = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener() { 
    public boolean onDoubleTap(MotionEvent e) { 
     Log.e("", "Open new activty here"); 
     return true; 
    } 
}); 
TextView tv = (TextView) findViewById(R.id.editTextID); 
tv.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 
     return gestureDetector.onTouchEvent(event); 
    } 
}); 

Это возвращает ontapevent

+0

возможный дубликат http://stackoverflow.com/questions/ 41586072/одного щелчка и двойной щелчок-в-EditText-в-андроида-используя-на-клик-слушателя-S/41586210 # 41586210 – W4R10CK

ответ

0

Вы должны реализовать все я думаю, использовать этот код его:

final GestureDetector gd = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){ 
    //here is the method for double tap 
    @Override 
    public boolean onDoubleTap(MotionEvent e) { 

     //your action here for double tap e.g. 
     //Log.d("OnDoubleTapListener", "onDoubleTap"); 

     return true; 
    } 

    @Override 
    public void onLongPress(MotionEvent e) { 
     super.onLongPress(e); 

    } 

    @Override 
    public boolean onDoubleTapEvent(MotionEvent e) { 
     return true; 
    } 

    @Override 
    public boolean onDown(MotionEvent e) { 
     return true; 
    } 


}); 

//here yourView is the View on which you want to set the double tap action 

yourView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     return gd.onTouchEvent(event); 
    } 
}); 

Сказав, что это больше распространено в Android использовать longclick вместо этого,

Надеюсь, это поможет

0

Возможно, вам понадобится создать новый класс, который использует Onclick. Обычный щелчок будет задерживаться как 400 мс, пока второй щелчок не будет обнаружен с помощью таймера. Если нет второго нажмите после 400 мс не не существует, он будет рассматривать один Tap

public abstract class DoubleClickListener implements OnClickListener { 

    private Timer timer = null; //at class level; 
    private int DELAY = 400; 

    private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds 

    long lastClickTime = 0; 

    @Override 
    public void onClick(View v) { 
     long clickTime = System.currentTimeMillis(); 
     if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){ 
      processDoubleClickEvent(v); 
     } else { 
      processSingleClickEvent(v); 
     } 
     lastClickTime = clickTime; 
    } 



    public void processSingleClickEvent(final View v){ 

     final Handler handler=new Handler(); 
     final Runnable mRunnable=new Runnable(){ 
      public void run(){ 
       onSingleClick(v); //Do what ever u want on single click 
      } 
     }; 

     TimerTask timertask=new TimerTask(){ 
      @Override 
      public void run(){ 
        handler.post(mRunnable); 
      } 
     }; 
     timer=new Timer(); 
     timer.schedule(timertask,DELAY); 
    } 


    public void processDoubleClickEvent(View v){ 
     if(timer!=null) 
     { 
      timer.cancel(); //Cancels Running Tasks or Waiting Tasks. 
      timer.purge(); //Frees Memory by erasing cancelled Tasks. 
     } 

     onDoubleClick(v);//Do what ever u want on Double Click 
    } 

    public abstract void onSingleClick(View v); 

    public abstract void onDoubleClick(View v); 
} 

Как использовать

view.setOnClickListener(new DoubleClickListener() { 

      @Override 
      public void onSingleClick(View v) { 

      } 

      @Override 
      public void onDoubleClick(View v) { 
       // Your code here 
      } 
     }); 
0

один из ленивых реализации

private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds 

long lastClickTime = 0; 

TextView tv = (TextView) findViewById(R.id.editTextID); 
tv.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 
     long clickTime = System.currentTimeMillis(); 
    if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){ 
     lastClickTime = 0; 
     //double click 
    } else { 
     //single click 
    } 
    lastClickTime = clickTime; 
    } 
}); 

но не быть ленивым, если используя двойной щелчок снова и снова. идти лучший способ .. Создать абстрактный класс гоу на ..

public abstract class DoubleClickListener implements OnClickListener { 

private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds 

long lastClickTime = 0; 

@Override 
public void onClick(View v) { 
    long clickTime = System.currentTimeMillis(); 
    if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){ 
     onDoubleClick(v); 
     lastClickTime = 0; 
    } else { 
     onSingleClick(v); 
    } 
    lastClickTime = clickTime; 
} 

    public abstract void onSingleClick(View v); 
    public abstract void onDoubleClick(View v); 
} 

использовать его в любом месте

view.setOnClickListener(new DoubleClickListener() { 

    @Override 
    public void onSingleClick(View v) { 

    } 

    @Override 
    public void onDoubleClick(View v) { 

    } 
}); 

счастливым кодирования

Смежные вопросы