お世話になります。どなたか知恵をお貸しください。
やりたいこと
overlayでホーム画面に表示させたViewをユーザがドラッグ&ドロップで移動できるようにしたい。
かつ、そのView以外のホーム画面のタッチも反応して欲しい。
問題点
オーバーレイ表示させたViewのクリックイベントを拾うと、
他のレイヤーが反応しなくなってしまいます。
試したこと
View(以下ボタン)はドラッグ&ドロップで移動できるようにしたいため、以下のようにmatch_parentで画面全体を覆うような親ビューの下にボタンを配置しています。
overlay_layout.xml
1<RelativeLayout 2 android:id="@+id/overlay_layout" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:clickable="false"> 6 7 <Button 8 android:id="@+id/overlay_button" 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content"/> 11 12</RelativeLayout>
オーバーレイの方法はServiceとWindowManagerを使っています。
MyService.java
1/*** 略 ***/ 2// ウィンドウマネージャー 3WindoeManager wm = (WindowManager) applicationContext.getSystemService(Context.WINDOW_SERVICE); 4 5// オーバーレイ表示させるView 6ViewGroup overlayView = (ViewGroup) LayoutInflater.from(this).layoutInflater.inflate(R.layout.overlay_layout, null); 7 8// オーバーレイViewの設定をする 9WindowManager.LayoutParams params = 10 WindowManager.LayoutParams( 11 WindowManager.LayoutParams.MATCH_PARENT, 12 WindowManager.LayoutParams.MATCH_PARENT, 13 WindowManager.LayoutParams.TYPE_SYSTEM_ALART, 14 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 15 WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | 16 WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | 17 WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 18 PixelFormat.TRANSLUCENT); 19 20// オーバーレイのViewをウィンドウに追加 21wm.addView(overlayView, params);
クリックリスナーはボタンの方にしか設定していないのですが、
RelativeLayoutが画面全体で表示されているため、その下のレイヤーの操作ができなくなってしまいます。
RelativeLayoutをwrap_contentにしてボタンと同じサイズにすれば、ボタン以外の操作も可能になります。
しかし、そうするとボタンが移動できなくなってしまいます。
どのようにすれば、ボタンを画面全体で移動させ、かつ他のレイヤーのタッチイベントを拾えるのでしょうか?
あなたの回答
tips
プレビュー