rive-app / rive-android

A runtime for interactive animations on Android
https://rive.app
MIT License
332 stars 30 forks source link

Crash: TextureView doesn't support displaying a background drawable when using with compose #328

Open Svoka opened 1 month ago

Svoka commented 1 month ago

Description

I receive a TextureView doesn't support displaying a background drawable crash when trying to use Rive with Compose on Android 11

Provide a Repro

AndroidView(
modifier = Modifier,
factory = { context ->
            RiveAnimationView
            .Builder(context)
            .setAutoplay(true)
            .setResource("my_res")
            .build()
},
update = {  }
)

Look like it happen because of a

fun build(): RiveAnimationView {
            return RiveAnimationView(this)
}

which invokes RiveTextureView(context, attrs),

which invokes TextureView(context, attrs)

what I dig in my tests that you don't have to pass attrs if they are null, because under the hood the View.java class will try to applied default values which contains background attribute. And will try to it in any case where constructor different from View(context) callled

So I guess the possible fix is to add another constructor for RiveTextureView (so a call will start something like this)

abstract class RiveTextureView(context: Context) :
    TextureView(context),
    TextureView.SurfaceTextureListener {

Expected behavior

App do not crashed

Device & Versions (please complete the following information)

Additional context