目的:做一个全屏显示可以左右滑动选择的引导页,四个角为圆弧角,引导页放的是视频,于是采用videoView
问题:显示过程中,右边出现黑边情况,左边正常贴边
解决方法:
原本直接使用VideoView(VideoView videoview = new VideoView();)
现在写个类继承VideoView,主要是为了写onMeasure();
学习引用:VideoView–简单的设置全屏幕播放 - 感谢大大
/** 首页引导页面 - 视频界面*/
public class FullVideoView extends VideoView {
public FullVideoView(Context context) {
super(context);
}
public FullVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public FullVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// widthMeasureSpec:得到默认的大小 widthMeasureSpec-1:是为了画圆角
// 如果不画圆角建议不-1
// 这里如果不-1的话,是无法设置圆角的,具体原因暂时不知,待探索
// 推测 - 这个widthMeasureSpec是默认的大小,此时撑满了view,于是无法进行绘制圆角
int width = getDefaultSize(0,widthMeasureSpec-1);
int height = getDefaultSize(0,heightMeasureSpec-1);
setMeasuredDimension(width,height);
}
}
现在使用:(我是在一个Activity中使用 - 放在viewPager上面)
FullVideoView videoView = new FullVideoView(this);
//以上就可以实现viewpager中的界面全屏
//--------------------------------------------------------
...
//--------------------------------------------------------
//以下是为了设置圆角的
setCorner(videoview,50);
/** 设置圆角 */
//view - 给谁设置圆角
//angle - 圆角的角度
private void setCorner(View view, float angle){
RoundedStyle roundedStyle = new RoundedStyle(view);
roundedStyle.setRound(angle);
}
下面是
角度设置工具类
/** 圆角设置 */
public class RoundedStyle {
private View mView;
public RoundedStyle(View view){
mView = view;
}
/** 设置矩阵的圆角 */
public void setRound(float radius) {
this.mView.setClipToOutline(true);//用outline裁剪内容区域
this.mView.setOutlineProvider(new RoundViewProvider(radius));
}
public void setOval() {
this.mView.setClipToOutline(true);//用outline裁剪内容区域
this.mView.setOutlineProvider(new OvalViewProvider());
}
public void clearShapeStyle() {
this.mView.setClipToOutline(false);
}
}
/** 圆角矩形绘制 */
public class RoundViewProvider extends ViewOutlineProvider {
private float mRadius;//圆角弧度
public RoundViewProvider(float radius){
mRadius = radius;
}
@Override
public void getOutline(View view, Outline outline) {
Rect rect =new Rect();
view.getGlobalVisibleRect(rect);//将view的区域保存在rect中
Rect selfRect =new Rect(0,0, rect.right - rect.left, rect.bottom - rect.top);//绘制区域
outline.setRoundRect(selfRect,mRadius);
}
}
/** 圆角绘制 */
public class OvalViewProvider extends ViewOutlineProvider {
public OvalViewProvider(){
}
@Override
public void getOutline(View view, Outline outline) {
Rect selfRect;
Rect rect =new Rect();
view.getGlobalVisibleRect(rect);
selfRect = getOvalRect(rect);
outline.setOval(selfRect);
}
/**
* 以矩形的中心点为圆心,较短的边为直径画圆
* @param rect
* @return
* */
private Rect getOvalRect(Rect rect) {
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
int left, top, right, bottom;
int dW = width /2;
int dH = height /2;
if (width > height) {
left = dW - dH;
top =0;
right = dW + dH;
bottom = dH *2;
}else {
left = dH - dW;
top =0;
right = dH + dW;
bottom = dW *2;
}
return new Rect(left, top, right, bottom);
}
}