视频播放器(八)-横屏的播放界面

  • 第8节 横屏的播放界面
    • 1 播放器横屏布局
    • 2 全屏的设置
    • 3 横竖屏转换的状态保存

第8节 横屏的播放界面

在设备旋转成横屏的时候,视频将自动进行全屏播放。


8.1 播放器横屏布局

我们要为全屏播放界面设置一个新的布局,这个布局里面只用来播放视频,不需要显示任何视频信息,

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/video_background_color">

    <VideoView  android:layout_gravity="center" android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="match_parent"/>

</FrameLayout>

8.2 全屏的设置

因为横竖屏的VideoPlayer都是一套代码实现的,所以需要判断当前Activity是横屏还是竖屏,

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ......
    if (this.getResources().getConfiguration().orientation == 
            Configuration.ORIENTATION_LANDSCAPE) {
        //界面横屏时需要进行的操作
    }
    ......
}

VideoPlayer创建的时候,我们要对这个Activity进行全屏的设置,

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ......
    if (this.getResources().getConfiguration().orientation == 
        Configuration.ORIENTATION_LANDSCAPE) {

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        getSupportActionBar().hide();
    }
    ......
}

因为要使应用全屏,所以需要修改Activity所属的窗口-Window的属性。以此告诉系统需要隐藏状态栏和导航栏。

还需要隐藏ActionBar

8.3 横竖屏转换的状态保存

在旋转的过程中,Activity将经历这些的生命周期:
用户可以与Activity交互,此时屏幕进行旋转,从竖屏变横屏->
onSaveInstanceState()->
onPause()->
onStop()->
onDestroy()->
onCreate()->
onStart()->
onRestoreInstanceState()->
onResume()->
用户可以与Activity交互;

可见,这个Activity要被重新创建一次,所以当视频正在播放的时候,我们要保存好视频当前播放的位置,Activity重建以后才能从之前播放到的位置继续播放。

我们要在onSaveInstanceState()里面保存当前播放的位置,

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    outState.putInt(LAST_PLAYED_TIME, mVideoView.getCurrentPosition());
    }

onRestoreInstanceState()里面取出打断播放时的位置,并存储到mLastPlayedTime里面,当Activity在onResume()的时候,就能够跳转到播放点开始播放了。

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    mLastPlayedTime = savedInstanceState.getInt(LAST_PLAYED_TIME);
}

你可能感兴趣的:(视频播放器,安卓开发,屏幕旋转,Activity周期)