如何实现TextureView或者SurfaceView 预览框为圆角

一时失言乱红尘 2022-06-11 00:20 937阅读 0赞

项目中,视频预览界面框为圆角;但发现是使用的Renderer渲染的方法进行的,的确可以有圆角效果。
但有个问题是:我的视频源与要显示视频的预览框的长宽比率不同,预览框需要满屏看到视频源,如果不做处理,视频源只能通过压缩来显示。造成了视频的变形,如果不拉伸处理,那么就进行裁剪处理,需要对视频进行Matrix操作,如移动,伸缩处理。进行这些处理后,渲染的圆角效果就不再出现了。所以通过Renderer来进行圆角效果,不但复杂而且并不可靠。
通过网上的搜索可以找到Android5.0后,一个类ViewOutlineProvider;基于View自身的setClipToOutline(boolean clipToOutline)和setOutlineProvider(ViewOutlineProvider provider)方法实现了该需求。

  1. public class TextureVideoViewOutlineProvider extends ViewOutlineProvider {
  2. private float mRadius;
  3. public TextureVideoViewOutlineProvider(float radius) {
  4. this.mRadius = radius;
  5. }
  6. @Override
  7. public void getOutline(View view, Outline outline) {
  8. Rect rect = new Rect();
  9. view.getGlobalVisibleRect(rect);
  10. int leftMargin = 0;
  11. int topMargin = 0;
  12. Rect selfRect = new Rect(leftMargin, topMargin,
  13. rect.right - rect.left - leftMargin, rect.bottom - rect.top - topMargin);
  14. outline.setRoundRect(selfRect, mRadius);
  15. }
  16. }
  17. mView.setOutlineProvider(new TextureVideoViewOutlineProvider(radius));
  18. mView.setClipToOutline(true);

任何View都可通过此方法达到圆角效果。

发表评论

表情:
评论列表 (有 0 条评论,937人围观)

还没有评论,来说两句吧...

相关阅读