java - TYPE_SYSTEM_OVERLAY 内的 GestureDetector

标签 java android service overlay gesturedetector

我创建了一个TYPE_SYSTEM_OVERLAY,并且希望使用服务捕获此叠加层上的手指/触摸事件。

覆盖层工作正常,但问题是当我尝试将 GestureDetector 合并到其中时,它无法捕获触摸事件。当我点击屏幕时, toast 消息“onDown”没有显示..

如果有人告诉我哪里出了问题,我将不胜感激:(我尝试在OverlayView类之外实现GestureDetector,但也没有结果。

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

最佳答案

首先,这不应该是 IntentService。在您当前的实现中,onDestroy() 将在 onCreate() 之后一两毫秒调用。

其次,出于安全原因,TYPE_SYSTEM_OVERLAY 自 Android 4.0 起无法接收任何触摸事件。

关于java - TYPE_SYSTEM_OVERLAY 内的 GestureDetector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717763/

相关文章:

android - 查看其父级高度和宽度的一半

android - Http 响应的空指针异常

angular - 可观察的行为主体服务 - 单例和提供者

javascript - Angular5 服务不发送数据?

android - 服务+安卓 :process "vs" IntentService

java - 在Java中对一个大文件进行排序

java - JaxB Unmarshal 异常 : javax. xml.bind.UnmarshalException : unexpected element. 我哪里出错了?

java - SingleValueEvent 显示为空

java - 如何获取活跃用户的 UserDetails

java - 如何在 android 中动态添加多个水平 ListView ,如 android 中的 play store 应用程序