在Android中连续“Action_DOWN”

时间:2014-07-28 14:56:34

标签: android touch ontouchlistener

@Override
public boolean onTouchEvent(MotionEvent event) {

if(event.getAction()==MotionEvent.ACTION_DOWN){
Log.d(VIEW_LOG_TAG, "Touching Down");
}
    if(event.getAction()==MotionEvent.ACTION_UP){
Log.d(VIEW_LOG_TAG, "Not Touching");
}
}

我想要日志 - >"触及"应该连续显示在日志中,直到释放手指。

请帮助

非常重要......我不能在没有这个的情况下继续进行ma项目。

2 个答案:

答案 0 :(得分:5)

你不能在UI-Thread中这样做。在UI-Thread中运行的代码必须很短,以保持UI响应。

所以你需要创建一个线程。

  • ACTION_DOWN
  • 时启动该主题
  • 在线程中:用你的日志写一个循环(使用一个标志来停止循环)
  • ACTION_UP 时:更改标志(这将导致线程中的循环结束。

示例代码:

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);
    }
}

答案 1 :(得分:2)

每次触摸更新只会获得一个事件。因此,当用户发布时,您将获得ACTION_DOWN,然后可能是ACTION_MOVE和ACTION_UP。

你可以做一些重复的事情,直到你检查ACTION_UP,或者你也可以根据你的要求触发ACTION_MOVE。

这样的事情:

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);
}