5

誰かがこれをどのように実装できるか考えていますか?

いくつかの例:

何か案が?ありがとう。

4

2 に答える 2

11

これは、既存のアクティビティの上にオーバーレイを使用して行われます。私の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_OVERLAYWindowManager.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 ゲームである場合はどうなりますか?

これは、何に注意する必要があるかを示すためのものです。

于 2012-07-12T01:51:11.553 に答える
6

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 は、他のアプリケーションの上にあるフローティング ウィジェットとして利用できるようになりました。

于 2015-02-05T10:51:25.740 に答える