目前,我尝试了这个,但没有工作。
val surfaceView = RtcEngine.CreateRendererView(baseContext)
surfaceView.apply {
clipToOutline = true
clipBounds = Rect(15,15, 15, 15)
outlineProvider = CircularOutlineProvider(15)
setZOrderMediaOverlay(true)
}
binding.localVideoViewContainer.apply {
addView(surfaceView)
clipToOutline = true
clipBounds = Rect(15,15, 15, 15)
outlineProvider = CircularOutlineProvider(15)
}
class CircularOutlineProvider(val c: Int):ViewOutlineProvider() {
override fun getOutline(view:View, outline:Outline) {
outline.setRoundRect(c, c, view.width - c, view.height - c, view.width/2f)
}
}
<FrameLayout
android:id="@+id/local_video_view_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="true"
android:clipToOutline="true"
tools:background="@color/gray_7f"/>
我甚至尝试过用这样的可绘制文件设置背景,但没有工作。
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#CCCCCC"/>
<stroke android:width="2dp"
android:color="#999999"/>
<padding android:left="2dp"
android:top="2dp"
android:right="2dp"
android:bottom="2dp"/>
<corners android:radius="8dp" />
</shape>
<FrameLayout
android:width="match_parent"
android:height="wrap_content"
android:background="@drawable/rounded_shape"/>
另外,WebView也有类似的问题。这有关系吗?
这是相关的,一些视频(SurfaceView
)和网页内容(WebView
)是在原生端"下"框架,而不考虑其布局。这些View
实际上是在"切割一个洞"。在布局的地方,他们的定位和一些智能算法绘制在这些矩形上,无论其他框架级的View
或框架相关的装饰,本地端是覆盖这个
你可以尝试使用TextureView
如果可能的话,你的播放器,它就像SurfaceView
的v2,它尊重(部分)框架绘制的参数和XML属性,这是为shure,所以也许也drawables/View
s覆盖它
使用CardView代替framayout并设置角半径,然后从agora添加remoteSurfaceView到它。
<androidx.cardview.widget.CardView
android:id="@+id/small_video_container"
android:layout_width="134dp"
android:layout_height="134dp"
app:cardCornerRadius="70dp"
app:cardBackgroundColor="@android:color/transparent"
android:layout_gravity="center"/>