2

を作成しました。TYPE_SYSTEM_OVERLAYこのオーバーレイで を使用して指/タッチ イベントをキャプチャしたいと考えていserviceます。

オーバーレイは正常に機能しますが、問題は、オーバーレイを組み込んだときにタッチ イベントをキャプチャできないGestureDetectorことです。画面をタップすると、トーストメッセージ「onDown」が表示されませんでした..

誰かがどこで間違ったのか教えてくれれば感謝します:(クラスのGestureDetector外側を実装しようとしましたが、結果もありませんでした。OverlayView

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

1 に答える 1

2

まず、これはIntentService. 現在の実装でonDestroy()は、 は 1 ~ 2 ミリ秒後に呼び出されますonCreate()

次に、TYPE_SYSTEM_OVERLAYセキュリティ上の理由から、Android 4.0 の時点でタッチ イベントを受信できません。

于 2012-03-15T11:41:37.237 に答える