2015-04-29 23 views
0

我想做一个简单的应用程序,它可以做到以下几点。 有一个用于mediaPlay的ImageView和SurfaceView。Android - 正在触摸视图时执行任务吗?怎么样?

  1. 如果这个观点没有被触及,什么也不做。
  2. 如果正在触摸此视图,请每隔100 ms留出一条日志消息。

假设 - 我们有printLogMsg()已可用于2

那么,我该怎么办是一个onTouchListener设置为ImageView的。 我的问题是,如何在此onTouchListener中执行printLogMsg()。

private OnTouchListener mTouchListener = new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       Log.d("log", "!!!down"); 
       break; 

      case MotionEvent.ACTION_HOVER_ENTER: 
       Log.d("log", "!!!hover enter"); 
       break; 

      case MotionEvent.ACTION_UP: 
       Log.d("log", "!!!up"); 
       break; 
     } 

     return false; 
    } 
}; 

我有这样的事情,但触摸ImageView将只打印“向下”一次。有没有办法做到这一点?谢谢!

谢谢:)

+0

见http://stackoverflow.com/a/4598737/1760858。只要确保在收到ACTION_UP时停止计时器(或停止重新计划)。 – velis

回答

1

你可以这样做。

private android.os.Handler handler; 
private Runnable someTask; 

初始化它们somehwere

private void init(){ 
    handler = new Handler(Looper.getMainLooper()); 
    someTask = new Runnable() { 
     @Override 
     public void run() { 
      // Do what you want 
      printLogMsg(); 
      handler.postDelayed(this, 100); 
     } 
    }; 
} 

而且onTouch方法

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_UP: 
      handler.removeCallbacks(someTask); 
      return true; 
     case MotionEvent.ACTION_DOWN: 
      handler.postDelayed(someTask, 100); 
     default: 
      return super.onTouchEvent(event); 
    } 
} 
相关问题