3

liveStreamを再生するAndroidアプリを作成しています。layout.xmlにvideoViewを追加し、layout-landのフォルダーを追加しました。

アプリにビデオをフルスクリーンでレイアウトのみで表示させたい-ポートレートではなく土地

そこで、onCreate()に次のコードを追加しました。

public void onConfigurationChanged(Configuration newConfig){
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE
   {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
   } else 
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
}

しかし、私の問題は、デバイスを回転させるとアクティビティが再開され、ビデオのストリームが停止することです。これを防ぎたいと思います。それで。この行を明示するために追加しました

 android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

ただし、これにより、onCreate()のコードが1回だけ実行されます。

アプリでビデオストリームを継続的に再生する方法と、デバイスを回転させてレイアウトランドでフルスクリーンを作成した後、ポートレートに戻ったときに通常の状態にする方法を教えてください。

誰かが私の意地悪を手に入れたことを願っています。前もって感謝します。

4

2 に答える 2

12

ビデオビュー (またはコンテンツの親) をレイアウト ファイルの最後の要素として追加する必要があります。次のコードを使用します。

private RelativeLayout.LayoutParams paramsNotFullscreen; //if you're using RelativeLatout           

@Override
public void onConfigurationChanged(Configuration newConfig) 
{
    super.onConfigurationChanged(newConfig);


    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) //To fullscreen
    {
        paramsNotFullscreen=(RelativeLayout.LayoutParams)mVideoView.getLayoutParams();
        RelativeLayout.LayoutParams params=new LayoutParams(paramsNotFullscreen);
        params.setMargins(0, 0, 0, 0);
        params.height=ViewGroup.LayoutParams.MATCH_PARENT;
        params.width=ViewGroup.LayoutParams.MATCH_PARENT;
        params.addRule(RelativeLayout.CENTER_IN_PARENT);
        mVideoView.setLayoutParams(params);

    } 
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) 
    {
        mVideoView.setLayoutParams(paramsNotFullscreen);
    }
}

videoview layoutparams のコピーを取得し、グローバル変数に保存します。次に、以前の値で新しい layoutparams オブジェクトを作成しますが、制限を match_parent に設定し、videoview に設定します。あなたのビデオビューはフルスクリーンです。デバイスを縦向きにすると、paramsNotFullscreen は以前の値を復元します。

アップデート:

マニフェスト ファイルでは、アクティビティの再起動を回避するために、次のコードをアクティビティ宣言に追加する必要があります。

android:configChanges="screenLayout|screenSize|orientation"
于 2012-10-23T15:12:44.380 に答える
1

これを試して...

@Override
    public void onConfigurationChanged(Configuration newConfig) 
    {
        super.onConfigurationChanged(newConfig);


        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) 
        {
            setContentView(R.layout.create_job_l);

        } 
        else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
        {
            setContentView(R.layout.create_job_p);

        }
    }
    @Override
    public void onCreate(Bundle savedInstanceState)
    {

        super.onCreate(savedInstanceState);
        if (getResources().getConfiguration().orientation == 1)
        {
            setContentView(R.layout.create_job_p);
        }
        if (getResources().getConfiguration().orientation == 2)
        {
            setContentView(R.layout.create_job_l);
        }


    }
于 2012-10-22T13:00:39.337 に答える