/

TextureView和SurfaceView圆角预览实现


        入正题,最近有个需求,视频播放器需要实现圆角功能,找了很多资料,实现View的圆角有很多,但是实现TextureView和SurfaceView的圆角就几乎没有!

可愁死我了,终于,功夫不负有心人,终究还是有了解决方案,基于View自身的setClipToOutline(boolean clipToOutline)和setOutlineProvider(ViewOutlineProvider provider)

方法实现了该需求。

首先,自定义继承一个ViewOutlineProvider,重写该getOutline(View view, Outline outline)方法,如下:

public class TextureVideoViewOutlineProvider extends ViewOutlineProvider {
    private float mRadius;

    public TextureVideoViewOutlineProvider(float radius) {
        this.mRadius = radius;
    }

    @Override
    public void getOutline(View view, Outline outline) {
        Rect rect = new Rect();
        view.getGlobalVisibleRect(rect);
        int leftMargin = 0;
        int topMargin = 0;
        Rect selfRect = new Rect(leftMargin, topMargin,
                rect.right - rect.left - leftMargin, rect.bottom - rect.top - topMargin);
        outline.setRoundRect(selfRect, mRadius);
    }
}

通过如下设置即可实现TextureView和SurfaceView的圆角,

mVideoView.setOutlineProvider(new TextureVideoViewOutlineProvider(radius));
mVideoView.setClipToOutline(true);

通过验证,所有View都支持该种方式设置圆角。。。

发布评论

热门评论区: