19

ポートレートモードで再生するビデオがあります。ビデオの最後に、いくつかのビューを表示する必要があります。これはこれまでのところうまくいきます。

ただし、画面をオフにしてから再度オンにし、画面のロックを解除した後にアクティビティに戻ったときに、ビデオの最後のフレームを超えるビューが適切に再描画されないという問題があります。

私が観察しているのは、画面が再びオンになり、ロックが解除されたときです。私のビデオと画像は最初にフルスクリーン モード以外でレンダリングされ (ステータス バーは表示されたまま)、次に画面がフルスクリーン モードになり、すべてのビューが上に移動してアーティファクトが発生します。

ビューがレンダリングされた後にフルスクリーンに移行することにより、ビューがビューの境界からシフトされているようです。

どうすればこのようなことが起こらないようにできるのか、私は本当に困惑しています。

コードだらけの投稿にならないように、github のサンドボックス プロジェクトを次に示します。

プロジェクトの基本的なセットアップは次のとおりです。

Fragment アクティビティには、そのレイアウトにビデオ ビューとボタン ビューがあります。次に、フラグメントを contentView コンテナーに追加します。contentView は、ビデオの再生が終了する 1 秒前にフェードインします。

すべてがスムーズに機能し、問題は画面の電源を入れたり切ったりした後にアプリに戻ることです.

また、ビデオが完全にドロップアウトして、ビューが黒い背景の上に残ることもあります。

ご協力いただきありがとうございます。

ビデオ上のビューの適切なレンダリング

画面をオフにしてから再びオンにし、ロックを解除したときに発生するアーティファクトを次に示します。私はそれの写真を撮らなければならなかったことに注意してください。DDMS では、スクリーンショット ツールが画像を正しく認識します。

人工画像

4

3 に答える 3

3

画面がオフになるのを防ぐのではなく、ユーザーが電話のスリープを解除した後にキーガードのロックを解除したときにイベントを受信することを選択できます。

この時点で、両方のビューでView.invalidateを呼び出すことをお勧めします。これにより、再描画が発生するはずです。アプリはロック画面のすぐ下に技術的に表示されるため、ロック画面が表示されている間、ドロー チェーンは非常に不安定です。

    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context ctx, Intent intent) {
            if(intent.getAction().equals(Intent.ACTION_USER_PRESENT))

        }
    }, new IntentFilter(Intent.ACTION_USER_PRESENT));
于 2012-04-04T21:56:55.907 に答える
0

オーバーレイレイアウトがコントローラーバーによってシフトされたようです。
コントローラー(再生/一時停止/ ff /巻き戻し+進行)エリアの影響を受けたと思いませんか?

于 2012-02-13T04:59:41.167 に答える
0

これは再描画の問題を解決するのに役立つため、最初の場所で画面がオフになるのを防ぐ方法があるかもしれません。これが役立つことを願っています.

于 2012-03-14T12:40:55.573 に答える