android视频播放器设置圆角,圆形视频和圆角视频的一种实现方式

本文档介绍了如何在Android中实现圆角视频效果,通过OpenGL ES的模板测试功能,结合MediaPlayer,创建了一个可以添加视图并支持圆角裁剪的视频播放组件。代码示例展示了如何先绘制形状,然后将视频覆盖在上面进行裁剪,实现过程类似Canvas的PorterDuffXfermode处理圆形图片。提供的代码库虽然能满足基本需求,但作者对其进行了改进以满足在圆角视频上添加视图的需求。
摘要由CSDN通过智能技术生成

介绍

因为项目的需要需要实现圆角视频,一开始接到需求的时候是惊讶的,因为很少有圆角的视频(主要是一开始没有思路了。。。。。)

github 上已经有一个实现了

videoroundedcorners

但是对于我的需要有些不满足,不能了在上面添加view,因为它设置了

setZOrderOnTop

所以才有了这边文章

效果

da7ddf796b0d

屏幕快照 2018-04-12 下午5.38.26.png

da7ddf796b0d

屏幕快照 2018-04-12 下午5.38.35.png

好了效果就是这样的,接下来是代码了

实现部分

这里是采用MediaPlayer 和 Opengl 实现的

用到了Opengl的模板测试功能

@Override

public void onDrawFrame(GL10 gl) {

GLES20.glEnable(GLES20.GL_STENCIL_TEST);

GLES20.glClear(GLES20.GL_STENCIL_BUFFER_BIT);

GLES20.glStencilFunc(GLES20.GL_ALWAYS, 1, 0xff); // 总是通过

GLES20.glStencilOp(GLES20.GL_KEEP, GLES20.GL_KEEP, GLES20.GL_REPLACE);

if (currentShape == SHAPE_CIRCL) {

mCircleShape.draw();

} else {

mRoundShape.draw();

}

GLES20.glStencilFunc(GLES20.GL_EQUAL, 1, 0xff); // 只有模板缓冲区中的模板值为1的地方才被绘制

GLES20.glStencilOp(GLES20.GL_KEEP, GLES20.GL_KEEP, GLES20.GL_KEEP);

mVideoTextture.draw();

GLES20.glDisable(GLES20.GL_STENCIL_TEST);

}

先画一个形状然后再把视频覆盖到上面进行裁剪实现还是不复杂的。

跟Canvas的PorterDuffXfermode实现圆形图片有点异曲同工的意思。

有需要可以去看看代码

如果对你有帮助就给他stars吧

代码链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值