我很难绕过surfaceview的角落。我正在使用MjpegView (从surfaceview继承的自定义视图。 我已尝试过这个解决方案: 1)使用带圆角的自定义绘图设置背景 2)阅读本文http://androidtutorialsandtips.blogspot.co.il/2012/01/overriding-ondraw-method-in-surfaceview.html后 我不确定如何实现圆角,因为我已经实现了一个锁定画布的线程。
while (mRun)
{
if (surfaceDone)
{
try
{
c = mSurfaceHolder.lockCanvas();
synchronized (mSurfaceHolder)
{
try
{
if (mIn != null)
{
Bitmap bm = mIn.readMjpegFrame();
destRect = destRect(bm.getWidth(), bm.getHeight());
if (streamHeight == -1 && streamWidth == -1)
{
streamWidth = bm.getWidth();
streamHeight = bm.getHeight();
}
c.drawColor(Color.BLACK);
c.drawBitmap(bm, null, destRect, p);
if (showFps)
{
p.setXfermode(mode);
if (ovl != null)
{
height = ((ovlPos & 1) == 1) ? destRect.top : destRect.bottom - ovl.getHeight();
width = ((ovlPos & 8) == 8) ? destRect.left : destRect.right - ovl.getWidth();
c.drawBitmap(ovl, width, height, null);
}
p.setXfermode(null);
frameCounter++;
if ((System.currentTimeMillis() - start) >= 1000)
{
fps = String.valueOf(frameCounter) + "fps";
frameCounter = 0;
start = System.currentTimeMillis();
ovl = makeFpsOverlay(overlayPaint, fps);
}
}
}
}
catch (IOException e)
{
}
}
}
finally
{
if (c != null) mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
答案 0 :(得分:1)
如果我理解你的问题:
创建一个包含2个子项的<FrameLayout ...>
:表面视图和其上方的部分透明覆盖层。 (FrameLayout
将其子女一个接一个地吸引。)
在封面图层上绘制圆角。
也就是说,SurfaceView
上面会有一个不透明层,而不透明层的中心会有一个带圆角的透明孔。
这是一个示例,我用一个50%透明黑色图层(默认情况下 visibility =“不可见”)和里面带按钮的RelativeLayout覆盖SurfaceView。
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<SurfaceView
android:id="@+id/camera_preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true" />
<View
android:id="@+id/transparency"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#80000000"
android:visibility="invisible"
/>
<RelativeLayout
android:id="@+id/xxxxx"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
...
答案 1 :(得分:0)
要实现您的要求,这很容易做到。您只需要使用下一个XML:
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:cardCornerRadius="12dp">
<SurfaceView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</androidx.cardview.widget.CardView>
要使用此CardView,请在您的 build.gradle 应用上添加此依赖项:
implementation 'androidx.cardview:cardview:1.0.0'