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 に設定すると、クリック イベントを取得できません。