2012-03-15 72 views
2

我創建了一個TYPE_SYSTEM_OVERLAY,我希望使用service來捕獲此覆蓋層上的手指/觸摸事件。TYPE_SYSTEM_OVERLAY中的手勢檢測器

覆蓋工作正常,但問題是,當我嘗試將GestureDetector納入其中時,它無法捕獲觸摸事件。當我在屏幕上,麪包味精「onDown」沒有顯示..挖掘,如果有人告訴我,我在哪裏出了錯:(我已經嘗試實現GestureDetectorOverlayView類的,也沒有結果。

會明白

public class NUSLogService extends IntentService { 
     OverlayView mView; 

     @Override 
     public void onCreate() { 
      super.onCreate(); 

      final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
       WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 
       PixelFormat.TRANSLUCENT); 

       params.gravity = Gravity.RIGHT | Gravity.BOTTOM; 
       params.setTitle("TouchLayer"); 
       mView = new OverlayView(getApplicationContext()); 

      final WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
       wm.addView(mView, params); 
     } 
    @Override 
    public void onDestroy() { 
      super.onDestroy(); 
      if(mView != null) 
      { 
      ((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(mView); 
      mView = null; 
      } 
     } 

    //self-created overlay class 
    class OverlayView extends ViewGroup implements OnGestureListener{ 

     private GestureDetector gestureScanner = new GestureDetector(this); 

     public OverlayView(Context context) { 
     super(context); 
     Toast.makeText(getContext(),"OverlayView", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
    //  return super.onTouchEvent(event); 
      return gestureScanner.onTouchEvent(event); 
     } 

     @Override 
     protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) { 
     // TODO Auto-generated method stub   
     } 

     @Override 
     public boolean onDown(MotionEvent e) { 
     Toast.makeText(getContext(),"onDown", Toast.LENGTH_SHORT).show(); 
     return false; 
     } 
} 

回答

2

首先,這不應該是一個IntentService。在當前的實施,onDestroy()將被稱爲onCreate()後一毫秒或兩個。

其次,TYPE_SYSTEM_OVERLAY不能接收任何觸摸事件的Android 4.0的,爲了安全原因秒。

+0

嗨,感謝您的回覆。但如果我把'onTouchEvent'上的吐司味精,它的工作..所以如果我使用'IntentService'是否重要? 我在Android 2.2上實現,所以應該現在好嗎? – star 2012-03-15 11:52:35

+0

@star:「如果我使用IntentService,這很重要嗎?」 - 當然很重要。添加後立即刪除您的視圖。 – CommonsWare 2012-03-15 11:58:55

+0

我已經實現了使用'服務'的手勢檢測器,但也不能工作[我不能@Override的onTouchEvent()?相同的代碼工作使用'活動'..任何想法如何我可以使用服務使用GestureDetector? – star 2012-03-15 13:12:24