如何实现TextureView或者SurfaceView 预览框为圆角
来源:互联网 发布:redmine数据迁移 编辑:程序博客网 时间:2024/06/05 22:43
项目中,视频预览界面框为圆角;但发现是使用的Renderer渲染的方法进行的,的确可以有圆角效果。
但有个问题是:我的视频源与要显示视频的预览框的长宽比率不同,预览框需要满屏看到视频源,如果不做处理,视频源只能通过压缩来显示。造成了视频的变形,如果不拉伸处理,那么就进行裁剪处理,需要对视频进行Matrix操作,如移动,伸缩处理。进行这些处理后,渲染的圆角效果就不再出现了。所以通过Renderer来进行圆角效果,不但复杂而且并不可靠。
通过网上的搜索可以找到Android5.0后,一个类ViewOutlineProvider;基于View自身的setClipToOutline(boolean clipToOutline)和setOutlineProvider(ViewOutlineProvider provider)方法实现了该需求。
任何View都可通过此方法达到圆角效果。
但有个问题是:我的视频源与要显示视频的预览框的长宽比率不同,预览框需要满屏看到视频源,如果不做处理,视频源只能通过压缩来显示。造成了视频的变形,如果不拉伸处理,那么就进行裁剪处理,需要对视频进行Matrix操作,如移动,伸缩处理。进行这些处理后,渲染的圆角效果就不再出现了。所以通过Renderer来进行圆角效果,不但复杂而且并不可靠。
通过网上的搜索可以找到Android5.0后,一个类ViewOutlineProvider;基于View自身的setClipToOutline(boolean clipToOutline)和setOutlineProvider(ViewOutlineProvider provider)方法实现了该需求。
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); } }
mView.setOutlineProvider(new TextureVideoViewOutlineProvider(radius)); mView.setClipToOutline(true);
任何View都可通过此方法达到圆角效果。
阅读全文
1 0
- 如何实现TextureView或者SurfaceView 预览框为圆角
- Anroid TextureView、SurfaceView的Camera预览实现
- TextureView 实现Camera预览
- SurfaceView实现圆角矩形预览
- Camera 预览之SurfaceView、TextureView、GLSurfaceView(一)
- Camera 预览之SurfaceView、TextureView、GLSurfaceView(二)
- Camera 预览之SurfaceView、TextureView、GLSurfaceView(三)
- Android SurfaceView vs TextureView
- Android 笔记 surfaceView textureView
- TextureView VS SurfaceView-android
- Surface, SurfaceView, TextureView
- SurfaceView及TextureView
- SurfaceView及TextureView区别
- SurfaceView, GLSurfaceView, SurfaceTexture和TextureView
- SurfaceView和TextureView区别分析
- SurfaceView和TextureView区别分析
- 建议使用TextureView替代SurfaceView
- 如何实现Android SurfaceView
- Linux编译出的进程内没有新编写的函数
- 80%的站长不知道的“网站微调”优化技术
- EasyuI TreeGrid设置行可选、checkbox可勾选,以及根据checkbox勾选,默认选中行
- [leetcode]125. Valid Palindrome@Java解题报告
- 颜色码表
- 如何实现TextureView或者SurfaceView 预览框为圆角
- 设计模式之观察者模式
- Professional JS(11.1-Selectors API/Elemenet Traversal/HTML5/Proprietary Extensions[part]-11.4.3)
- CodeForces
- 结构,联合和枚举
- 如何获取type=radio属性的value值
- java 反射机制的几个调用方法
- PDF如何转换成HTML
- springboot利用swagger构建api文档