Android : Dialog中VideoView全屏播放
前几天公司要求在引导页播放视频,如果跳转到activity去进行播放,再返回时生命周期方法调动会不太好,最后改成了在引导页构建一个Dialog,在Dialog中进行VideoView的全屏视频播放。具体代码如下:
private void playVideo(){View dialogView=View.inflate(MainActivity.this, R.layout.activity_splash_video, null);AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this,R.style.SplashErrorDialogTheme);builder.setView(dialogView);builder.setCancelable(false);final AlertDialog dialog=builder.create();WindowManager.LayoutParams lp = new WindowManager.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);lp.copyFrom(dialog.getWindow().getAttributes());dialog.getWindow().getDecorView().setPadding(0,0,0,0);dialog.getWindow().setAttributes(lp);dialog.getWindow().setWindowAnimations(R.style.AnimSlideBottom);dialog.show();videoView=dialogView.findViewById(R.id.video_view);videoView.setZOrderOnTop(true);Uri uri=Uri.parse("android.resource://" + getPackageName() + "/"+R.raw.startup2);videoView.setVideoURI(uri);videoView.setOnPreparedListener(mp -> {mp.start();mp.setLooping(false);});videoView.setOnCompletionListener(mp -> {if (dialog.isShowing()){dialog.dismiss();}});}
两个style的设置如下:
<style name="SplashErrorDialogTheme" parent="@style/Theme.AppCompat.Dialog.Alert"><item name="android:windowFullscreen">true</item><item name="android:windowIsFloating">true</item><item name="android:windowNoTitle">true</item><item name="android:windowBackground">@android:color/transparent</item><!--动画--><item name="android:windowAnimationStyle"> @style/AnimSlideBottom</item></style><style name="AnimSlideBottom" parent="android:Animation"><item name="android:windowEnterAnimation">@anim/dialog_in</item><item name="android:windowExitAnimation">@anim/dialog_out</item></style>
第二个只是一个动画的设置,就不贴代码了,你们可以改成Android自带动画就可以,比如:
<style name="AnimSlideBottom" parent="android:Animation"><item name="android:windowEnterAnimation">@android:anim/fade_in</item><item name="android:windowExitAnimation">@android:anim/fade_out</item></style>
其实还有一个问题是,在有一些手机上播放视频,状态栏不会覆盖掉,这个问题如果有解决方法希望可以在我这边留言。感谢
注:已解决,设置flags即可。
dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);