我喜欢开发一个类似于Swapps的应用程序。我试图在任何屏幕上显示一个按钮,并且应该只在滑动操作时发生。我尝试使用下面的代码
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type =WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
params.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
params.format =PixelFormat.TRANSLUCENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
parentlay = new LinearLayout(this);
mybt = new Button(getApplicationContext());
bt.setText("Click to Go");
parentlay.setBackgroundColor(Color.TRANSPARENT);
parentlay.setHapticFeedbackEnabled(true);
parentlay.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// event.getAction() prints 4 and not able to get up or down event
}
});
windowmanager.addView(parentlay, params);
当用户通过捕获该事件并执行从左到右滑动时,我试图显示按钮
parentlay.addView(bt);
并在用户从右向左滑动时删除视图
parentlay.removeView(bt);
如前所述,除非我将类型更改为 TYPE_SYSTEM_ALERT ,否则我无法获得运动事件,但这反过来会冻结所有屏幕并且无法单击返回或主页按钮,是否有任何替代方法可以做到这一点。
我刚刚尝试了以下修改
params.type =WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
|WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
|WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
params.width = WindowManager.LayoutParams.MATCH_PARENT;
但是我无法单击下面的按钮,可能是由于 MATCH_PARTENT 但如果我将其设置为 wrap_content 那么我无法获得点击事件。