KotlinのJetpack Composeでボタンクリック時にGLSurfaceView.Rendererのクラス内関数を呼び出す

2024年6月21日金曜日

Android Kotlin

t f B! P L
KotlinのJetpack Composeでボタンを押したとき、GLSurfaceView.Renderer内の関数を呼び出してプロパティを更新する処理を実装しましたが、プロパティが期待通りに更新されない問題が発生しました。

原因

この問題は、AndroidViewで設定したRendererインスタンスと、ボタンのonClickで呼び出すRendererインスタンスが異なっていたために起こっていました。setRenderer(MyRenderer(context))をsetRenderer(myRenderer)に変更することで、Rendererのインスタンスが一致し、プロパティが正しく更新されるようになりました。

MainActivity.tk

@Composable
fun OpenGLView() {
    val context = LocalContext.current
    val myRenderer = remember { MyRenderer(context) }
    
    Box(modifier = Modifier.fillMaxSize()) {
        AndroidView(
            modifier = Modifier.fillMaxSize(),
            factory = {
                GLSurfaceView(it).apply {
                    //setRenderer(MyRenderer(context)) まちがい
                    setRenderer(myRenderer)
                }
            }
        )
        
        :
        
        Button(onClick = {
            myRenderer.setDate(confirmedYear,confirmedMonth,confirmedDay)
            text = myRenderer.getWYearString()
         }) {
            Text("OK")
         }
    }

}


MyRenderer.tk
class MyRenderer(private val context: Context) : GLSurfaceView.Renderer {
:
}


このブログを検索

QooQ