ViewPager不能全屏显示-右边出现黑边问题

目的:做一个全屏显示可以左右滑动选择的引导页,四个角为圆弧角,引导页放的是视频,于是采用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);

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值