问题描述:Android VideoView播放视频竖屏切换横屏有黑边无法全屏
解决办法是自定义VedioView,动态设置宽高。
* 1.自定义VedioView,并在onMeasure中添加
int width = getDefaultSize(0,widthMeasureSpec);
int height = getDefaultSize(0,heightMeasureSpec);
setMeasuredDimension(width,height);
完整代码如下
package vedioplay.csy.com.videoplay;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.VideoView;
/**
* Created by chenshouyin on 2017/10/22.
* 我的博客:http://blog.csdn.net/e_inch_photo
* 我的Github:https://github.com/chenshouyin
*/
public class IVideoView extends VideoView {
public IVideoView(Context context) {
super(context);
}
public IVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public IVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//此处设置的默认值可随意,因为getDefaultSize中的size是有值的
int width = getDefaultSize(0,widthMeasureSpec);
int height = getDefaultSize(0,heightMeasureSpec);
setMeasuredDimension(width,height);
System.out.println("======onMeasure===width==="+width);
System.out.println("======onMeasure===height==="+height);
}
}
仅仅添加上述代码还是有问题,最底部还是有黑边
- 2.再在代码中横竖屏切换的时候添加
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DensityUtil.dip2px(CustomPlayStyleActivity.this,300));
mVideoView.setLayoutParams(params);
完整代码如下
/**
* 监听屏幕方向改变
* @param newConfig
* 配置文件配置了configChanges才会走次此回调
*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//配置文件中设置 android:configChanges="orientation|screenSize|keyboardHidden" 不然横竖屏切换的时候重新创建又重新播放
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
mVideoView.setLayoutParams(params);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);//显示顶部状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DensityUtil.dip2px(CustomPlayStyleActivity.this,300));
mVideoView.setLayoutParams(params);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏不 显示顶部状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
}
System.out.println("======onConfigurationChanged===");
}
如果本文对你有帮助,就关注下作者吧,点此查看全部最新文章