誰かがこれをどのように実装できるか考えていますか?
いくつかの例:
- https://play.google.com/store/apps/details?id=gpc.myweb.hinet.net.PopupVideo
- https://play.google.com/store/apps/details?id=com.milone.floatwidget
何か案が?ありがとう。
誰かがこれをどのように実装できるか考えていますか?
いくつかの例:
何か案が?ありがとう。
これは、既存のアクティビティの上にオーバーレイを使用して行われます。私のgithubでここにあるソースを見つけて、障害に苦しんで画面をスワイプしてスクロールできず、これを便利に行う方法を探していたアンドロイドのstackexchange.comの質問にあった概念実証を実証することができます、アクティビティの上に重ねられたテキスト(実際にはボタン)をタップするだけで、最小限の動きで「ページアップ/ページダウン」を表示するコードをまとめました。しかし、Android とセキュリティの仕組みが原因で、現在実行中のアクティビティにスクロール イベントを挿入できませんでした。
仕組みはこう、onCreate
アクティビティからはこう
WindowManager.LayoutParams layOutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
必要なフラグはWindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY
とWindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
です。
責任は、タッチが処理されていることを確認することです。これは、タッチ イベントが領域に「ヒット」したときに注意し、それに応じて行動することを意味します。ビューのonTouch
イベントを「リッスン」することにより、つまり:
LayoutInflater layOutInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View myView = layOutInflater.inflate(R.layout.myview, null);
myView.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
....
}
});
たとえば、そのmyview
レイアウト内のボタンを想像してください。ボタン ウィジェットを使用すると、
Button myButton = (Button)myView.findViewById(R.id.myButton);
Rect outRectHit = new Rect();
myButton.getHitRect(outRectHit);
ここで、onTouch
ハンドラー内で発生するタッチの境界の「衝突」を決定する必要があります。
float x = event.getX();
float y = event.getY();
if (x > outRectHit.left && x < outRectHit.right &&
y > outRectHit.top && y < outRectHit.bottom){
... Handle this accordingly
}
この簡単な要約では、任意のアクティビティの上にオーバーレイなどを行う方法について説明します。
念のために、コードがデバッグされ、表示されているアクティビティに何らかの形で干渉しないようにしてください。たとえば、アクティビティが実際に OpenGL ゲームである場合はどうなりますか?
これは、何に注意する必要があるかを示すためのものです。
Tooleap SDKをご覧になることをお勧めします。通常の Android アクティビティをフローティング ウィジェットに変換する最も簡単な方法を提供します。
たとえば、MyActivity というアクティビティがあるとします。
Intent intent = new Intent(context, MyActivity.class);
TooleapPopOutMiniApp miniApp = new TooleapPopOutMiniApp(context, intent);
Tooleap tooleap = Tooleap.getInstance(context);
tooleap.addMiniApp(miniApp);
MyActivity は、他のアプリケーションの上にあるフローティング ウィジェットとして利用できるようになりました。