项目中,视频预览界面框为圆角;但发现是使用的Renderer渲染的方法进行的,的确能够有圆角效果。
但有个问题是:个人视频源与要显示视频的预览框的长宽比率不一样,预览框须要满屏看到视频源,若是不作处理,视频源只能经过压缩来显示。形成了视频的变形,若是不拉伸处理,那么就进行裁剪处理,须要对视频进行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均可经过此方法达到圆角效果。