Skip to content Skip to sidebar Skip to footer

Continuous "action_down" In Android

@Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_DOWN){ Log.d(VIEW_LOG_TAG, 'Touching Down'); } if(event.getAction()==Motion

Solution 1:

You cannot do that in the UI-Thread. Code running in UI-Thread must be short to keep UI responsive.

So you need to create a thread.

  • start the thread when ACTION_DOWN
  • In the thread : write a loop with your log (use a flag to stop the loop)
  • when ACTION_UP : change the flag (this will cause the end of the loop in your thread.

Sample code :

AtomicBoolean actionDownFlag = new AtomicBoolean(true);

Thread loggingThread = new Thread(new Runnable(){
     publicvoidrun(){
         while(actionDownFlag.get()){
             Log.d(VIEW_LOG_TAG, "Touching Down");
             //maybe sleep some times to not polute your logcat
         }
         Log.d(VIEW_LOG_TAG, "Not Touching");
     }
});

@Override
public boolean onTouchEvent(MotionEvent event) {

    if(event.getAction()==MotionEvent.ACTION_DOWN){
        loggingThread.start();
    }
    if(event.getAction()==MotionEvent.ACTION_UP){
        actionDownFlag.set(false);
    }
}

Solution 2:

You will only get one event for each touch update. So you will get ACTION_DOWN, then probably ACTION_MOVE, and ACTION_UP when the user releases.

You can either do something that is repeating until you vet ACTION_UP, or you also trigger on ACTION_MOVE depending on your requirements.

Something like this:

Handlerhandler=newHandler();
booleanpushingDown=false;
Runnablerepeater=newRunnable() {
    @Overridepublicvoidrun() {
        Log.e("pressing down", "pressing down");
        if (pushingDown) {
            handler.postDelayed(this, 10);
        }
    }
};

@OverridepublicbooleanonTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        pushingDown = true;
        handler.post(repeater);
    }
    if (event.getAction() == MotionEvent.ACTION_UP) {
        pushingDown = false;
    }

    returnsuper.onTouchEvent(event);
}

Post a Comment for "Continuous "action_down" In Android"