@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
Log.d(VIEW_LOG_TAG, \"Touching Down\");
}
if(event.ge
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.
Sample code :
AtomicBoolean actionDownFlag = new AtomicBoolean(true);
Thread loggingThread = new Thread(new Runnable(){
public void run(){
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);
}
}
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:
Handler handler = new Handler();
boolean pushingDown = false;
Runnable repeater = new Runnable() {
@Override
public void run() {
Log.e("pressing down", "pressing down");
if (pushingDown) {
handler.postDelayed(this, 10);
}
}
};
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
pushingDown = true;
handler.post(repeater);
}
if (event.getAction() == MotionEvent.ACTION_UP) {
pushingDown = false;
}
return super.onTouchEvent(event);
}