質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Q&A

0回答

3177閲覧

オーバーレイ表示中のViewをユーザタップで移動させる

Farman

総合スコア14

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

0グッド

0クリップ

投稿2016/07/28 10:48

お世話になります。どなたか知恵をお貸しください。

やりたいこと

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にしてボタンと同じサイズにすれば、ボタン以外の操作も可能になります。
しかし、そうするとボタンが移動できなくなってしまいます。

どのようにすれば、ボタンを画面全体で移動させ、かつ他のレイヤーのタッチイベントを拾えるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問