产品想要的效果如下图所示:
这是一个左侧圆角,右侧直角的播放器视图。 由于TextureView继承自View,所以可以使用设置View通用的ViewOutlineProvider来实现圆角,如下所示:
mTextureView.setOutlineProvider(new TextureViewOutlineProvider(DisplayUtil.dp2px(20));
mTextureView.setClipToOutline(true);
自定义的ViewOutlineProvider如下:
public class TextureViewOutlineProvider extends ViewOutlineProvider {
private int raduis;
public TextureVideoViewOutlineProvider(int radius) {
this.raduis = radius;
}
@Override
public void getOutline(View view, Outline outline) {
Rect rect = new Rect();
view.getGlobalVisibleRect(rect);
Rect selfRect = new Rect(0, 0,
rect.right - rect.left,
rect.bottom - rect.top);
outline.setRoundRect(selfRect, raduis);
}
}
或者:
@Override
public void getOutline(View view, Outline outline) {
outline.setRoundRect(0,0,view.getWidth(),
view.getHeight(),radius);
}
但是这样获取到的是一个四周都是圆角的TextureView,如下所示:
这里要实现产品想要的只有左侧才有圆角,右侧直角的TextureView。
这里奇特的处理就是:将RoundRect的宽度增加了radius的长度(这样其实还是生成的是4个圆角,但是因为整个Rect的宽度变长了,但是TextureView的宽度还是不变,所以相当于这个Rect的宽度铺长了,右侧的radius就被隐藏了,所以就得到了上面的左侧圆角,右侧直角的Textureview)。
如下所示:
@Override
public void getOutline(View view, Outline outline) {
outline.setRoundRect(0,0,view.getWidth()+radius,
view.getHeight(),radius);
}
或者:
@Override
public void getOutline(View view, Outline outline) {
Rect rect = new Rect();
view.getGlobalVisibleRect(rect);
Rect selfRect = new Rect(0, 0,
rect.right - rect.left + radius,
rect.bottom - rect.top);
outline.setRoundRect(selfRect, raduis);
}
现在得到的就是左侧圆角,右侧圆角被隐去的TextureView: