视频播放全屏时其它控件的隐藏以及还原

项目当中有播放视频监控的需求,并且需要全屏播放的功能,完成之后在此记录。

其实就是布局控件和状态栏的隐藏与现实以及横竖屏的切换,代码如下:

                    //如果竖屏,则设置为横屏
if(mActivity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 设置当前activity为横屏


//隐藏mainActivity的radiogroup
mActivity.findViewById(R.id.rg_group).setVisibility(View.GONE);
//隐藏布局控件
rl_title.setVisibility(View.GONE);
rl_managermentName.setVisibility(View.GONE);
btn_video_call.setVisibility(View.GONE);
btn_message.setVisibility(View.GONE);
tv_full.setText("退出全屏");


//隐藏状态栏
WindowManager.LayoutParams lp = mActivity.getWindow().getAttributes();
lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
mActivity.getWindow().setAttributes(lp);
mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);


//视频布局大小的设置为全屏
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT,  LayoutParams.MATCH_PARENT);
rl_firstFragment.setLayoutParams(params); // 使设置好的布局参数应用到控件rl_firstFragment   
}else{
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);// 设置当前activity为竖屏
//显示各控件   
mActivity.findViewById(R.id.rg_group).setVisibility(View.VISIBLE);
rl_title.setVisibility(View.VISIBLE);
rl_managermentName.setVisibility(View.VISIBLE);
btn_video_call.setVisibility(View.VISIBLE);
btn_message.setVisibility(View.VISIBLE);
tv_full.setText("全屏");


//显示状态栏
WindowManager.LayoutParams attr = mActivity.getWindow().getAttributes();
attr.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
mActivity.getWindow().setAttributes(attr);
mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);


//视频大小控件还原
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT,  DensityUtils.dpTopx(mActivity, 250));
rl_firstFragment.setLayoutParams(params); // 使设置好的布局参数应用到控件rl_firstFragment  
}


还有就是可能推出全屏用户点击的是返回键。这时候就需要对返回键的 处理,代码如下:

顺便带上双击退出程序的功能代码

private long exitTime=0;

public boolean onKeyDown(int keyCode, KeyEvent event) {


//如果当前为横屏
if((getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);// 设置当前activity为竖屏
//显示各控件(fragment加载之后,在主activity可以直接find fragment的控件进行操作)   
findViewById(R.id.rg_group).setVisibility(View.VISIBLE);
findViewById(R.id.rl_title).setVisibility(View.VISIBLE);
findViewById(R.id.rl_managermentName).setVisibility(View.VISIBLE);
findViewById(R.id.btn_video_call).setVisibility(View.VISIBLE);
findViewById(R.id.btn_message).setVisibility(View.VISIBLE);
TextView tv_full=(TextView)findViewById(R.id.tv_full);
tv_full.setText("全屏");


//显示状态栏
WindowManager.LayoutParams attr = getWindow().getAttributes();
attr.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setAttributes(attr);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);




//视频大小控件还原
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT,  DensityUtils.dpTopx(this, 250));
findViewById(R.id.rl_firstFragment).setLayoutParams(params); // 使设置好的布局参数应用到控件rl_firstFragment  
return false;
}else{
if(keyCode==event.KEYCODE_BACK){
exit();
return false;
}


return super.onKeyDown(keyCode, event);
}
}

public void exit() {
if ((System.currentTimeMillis() - exitTime) > 1500) {
Toast.makeText(getApplicationContext(), "再按一次退出程序",
Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
finish();

MyApplication.getInstance().exit();
}
}

发布了23 篇原创文章 · 获赞 8 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章