我正在尝试使用 .NET (MAUI) 中的 Android 平台代码创建一个 ExoPlayer,该代码渲染到 TextureView(而不是默认的 SurfaceView)。
这是在 this thread 中针对 Android 进行讨论的。
在 .NET/MAUI 中,我们有以下适用于 ExoPlayer 的构造函数:
public unsafe StyledPlayerView (global::Android.Content.Context? context, global::Android.Util.IAttributeSet? attrs)
所以你可以运行它:
var PlayerView = new StyledPlayerView(androidContext, attributes);
//presuming you have a working 'attributes' file...
第二个“属性”参数
global::Android.Util.IAttributeSet? attrs
是我们应该指定我们想要一个TextureView的地方。
从上面的链接中,我们必须传入一个 XML 文件,该文件首先转换为
IAttributeSet
对象,以将 TextureView 指定为目标表面。
给出的 XML 示例是:
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/player_view"
app:surface_type="texture_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
这种性质的 XML 文件必须通过以下方式转换为构造函数所需的属性:
val xmlAttributes = context.resources.getXml(R.xml.player_view).let {
try {
it.next()
it.nextTag()
} catch (e: Exception) {
// do something, log, whatever
}
Xml.asAttributeSet(it)
}
如果我想完全在 C# 脚本中工作,并且不想从任何地方加载 XML 文件,而是只想将这个最小的短 XML 片段声明为字符串或直接写入我的 C# 代码中,我可以这样做吗这个?
如果是这样,我该怎么做? IE。比如:
string xmlSnippet = @"<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/player_view"
app:surface_type="texture_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>"
我可以将其传递到创建属性的代码中吗? IE。就像 C# 版本的:
val xmlAttributes = context.resources.getXml(xmlSnippet).let {
try {
it.next()
it.nextTag()
} catch (e: Exception) {
// do something, log, whatever
}
Xml.asAttributeSet(it)
}
任何人都可以提供纯 C# 代码的工作示例,该示例可以使 StyledPlayerView 构造函数所需的属性允许在 .NET 中创建基于 TextureView 的 Exoplayer 吗?
感谢您的帮助。
类
com.google.android.exoplayer2.ui.PlayerView
已弃用;请使用 androidx.media3.ui.PlayerView
代替。从代码构建视图的工作方式也与您想象的不同(正在处理 XML,并且仅提供对类的引用)。该文档将提供可以传递到构造函数中的所有相关属性名称,否则位于 XML 中的 app
命名空间下方。基本上不需要任何 XML 来构造 View
,但仍然需要以某种方式指示组件应出现在布局中的位置。