面具和剪辑GLSurfaceView
问题描述:
我使用通过回调提供矩形glsurfaceview的SDK。面具和剪辑GLSurfaceView
我希望能够以圆形布局呈现此视图。 (IE),我想在一个圆形视图显示视图
我一直在使用屏蔽布局尝试,如使用可屏蔽布局https://github.com/christophesmet/android_maskable_layout(伟大工程的图像,没有那么多视频)
我如何去裁剪并将其渲染为一个圆圈?
(背景是不断变化的,所以我不能叠加在该视频视图的顶部上的透明视图,其目的是为具有在顶部的矩形glsurface视图其中有一个圆形glsurface视图)
* * UI目标:**
答
我现在有一个几乎与项目相同的要求,其中涉及掩盖由PexKit提供的GLSurfaceView。适用于我的解决方案是制作FrameLayout(或任何其他ViewGroup)的子类,并将GLSurfaceView放入其中。
然后在子类中的FrameLayout使用canvas.clipPath:
private Path clippingPath;
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if (w != oldw || h != oldh) {
int radius = Math.min(w, h)/2;
clippingPath = new Path();
clippingPath.addCircle(w/2, h/2, radius, Path.Direction.CW);
}
}
@Override
protected void dispatchDraw(Canvas canvas) {
int count = canvas.save();
canvas.clipPath(clippingPath);
super.dispatchDraw(canvas);
canvas.restoreToCount(count);
}
我不是很确定你想要的布局的样子,或者你的应用程序是如何构成的。您可以使用第二个SurfaceView创建遮罩层;您只需要为遮罩层设置更近的Z深度。如果您有权访问视频源,则可以将其指向SurfaceTexture,然后使用自定义着色器来修改渲染(例如,对于每个片段,计算与中心的距离,并且如果它位于圆圈外部,则呈现为透明黑色)。有关各种示例,请参阅Grafika(https://github.com/google/grafika)。 – fadden 2015-03-03 17:02:06
@fadden编辑帖子以添加UI的外观图像。不会有这可能表面是一个问题?我无法访问视频源 - 这是一个连续的实时视频流。谢谢你的领导,我会检查grafika。 – lavi 2015-03-05 04:01:01