我创建了一个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/