面具和剪辑GLSurfaceView

问题描述:

我使用通过回调提供矩形glsurfaceview的SDK。面具和剪辑GLSurfaceView

我希望能够以圆形布局呈现此视图。 (IE),我想在一个圆形视图显示视图

我一直在使用屏蔽布局尝试,如使用可屏蔽布局https://github.com/christophesmet/android_maskable_layout(伟大工程的图像,没有那么多视频)

我如何去裁剪并将其渲染为一个圆圈?

(背景是不断变化的,所以我不能叠加在该视频视图的顶部上的透明视图,其目的是为具有在顶部的矩形glsurface视图其中有一个圆形glsurface视图)

* * UI目标:** enter image description here

+0

我不是很确定你想要的布局的样子,或者你的应用程序是如何构成的。您可以使用第二个SurfaceView创建遮罩层;您只需要为遮罩层设置更近的Z深度。如果您有权访问视频源,则可以将其指向SurfaceTexture,然后使用自定义着色器来修改渲染(例如,对于每个片段,计算与中心的距离,并且如果它位于圆圈外部,则呈现为透明黑色)。有关各种示例,请参阅Grafika(https://github.com/google/grafika)。 – fadden 2015-03-03 17:02:06

+0

@fadden编辑帖子以添加UI的外观图像。不会有这可能表面是一个问题?我无法访问视频源 - 这是一个连续的实时视频流。谢谢你的领导,我会检查grafika。 – lavi 2015-03-05 04:01:01

我现在有一个几乎与项目相同的要求,其中涉及掩盖由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); 
}