我在科特林遇到一些麻烦

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。问题是我不能同时拥有两个。

感谢帮助!

Mar*_*sta 5

您正在创建并实例化的一个匿名类,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)