Sof*_*ton 0 android object kotlin
我需要创建一个变量vVideo
。此变量是的类类型SurfaceViewRenderer
。该类扩展View
并实现另一个获得函数的类onFrame
。我需要重写它onFrame
。
这是我尝试过的:
private var vVideo: SurfaceViewRenderer? = null
fun startConfigurationAudioVideo() {
vVideo = object : SurfaceViewRenderer(this) {
override fun onFrame(frame: VideoFrame?) {
Log.d("vVideo", "onFrame")
super.onFrame(frame)
}
}
vVideo = findViewById<SurfaceViewRenderer>(R.id.activity_display_videocast)
...
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做:
vVideo = object : SurfaceViewRenderer(this) {
override fun onFrame(frame: VideoFrame?) {
Log.d("vVideo", "onFrame")
super.onFrame(frame)
}
}
Run Code Online (Sandbox Code Playgroud)
在此之前,
vVideo = findViewById<SurfaceViewRenderer>(R.id.activity_display_videocast)
我没有SurfaceRender。而且,如果我做逆运算,我不会得到监听器。
问题是我没有用她的方法onFrame及其表面(它的View)声明vVideo。问题是我不能同时拥有两个。
感谢帮助!
您正在创建并实例化的一个匿名类,SurfaceViewRenderer
然后在您的接口上获得一个匿名类,这是一个不同的对象。
要使此工作有效,您必须创建一个扩展的新类,SurfaceViewRenderer
然后在布局上使用它。
像这样:
package your.package.name
class SurfaceViewRendererWithFrameListener:SurfaceViewRenderer
{
override fun onFrame(frame: VideoFrame?)
{
Log.d("vVideo", "onFrame")
super.onFrame(frame)
}
}
Run Code Online (Sandbox Code Playgroud)
然后在布局上使用它:
<your.package.name.SurfaceViewRendererWithFrameListener
.../>
Run Code Online (Sandbox Code Playgroud)