Android之圆形预览的SurfaceView

使用ViewOutlineProvider来实现,ViewOutlineProvider专门用于阴影投射和剪切。

相关方法:

1. setOutlineProvider()

生成定义其投射阴影形状的轮廓,并且启用轮廓裁剪。

2. setClipToOutline()

设置是否应使用视图轮廓来剪切视图的内容


定义一个圆形的ViewOutlineProvider:


@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

    public static class CircleViewOutlineProvider extends ViewOutlineProvider {

        public CircleViewOutlineProvider() {

        }

        @Override

        public void getOutline(View view, Outline outline) {

            //864,648  横屏情况下,宽>高

            Log.d("Circle===","width:"+view.getWidth()+"==height:"+view.getHeight());

            //裁剪成一个圆形

            int left0 = (view.getWidth() - view.getHeight()) / 2;

            int top0 = 0;

            int right0 = left0 + view.getHeight() ;

            int bottom0 =  view.getHeight() ;

            outline.setOval(left0, top0, right0, bottom0);

        }

    }


设置到SurfaceView上:

surfaceView.setOutlineProvider(new CircleViewOutlineProvider(dp1));

surfaceView.setClipToOutline(true);


这样就可以实现圆形预览形状的SurfaceView了。


延伸,设置圆角的方式:

public class TextureVideoViewOutlineProviderextends 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);

    }

}

然后设置:

surfaceView.setOutlineProvider(new TextureVideoViewOutlineProvider(10));

surfaceView.setClipToOutline(true);

就可以实现圆角的效果了。

你可能感兴趣的:(Android之圆形预览的SurfaceView)