rive-app/rive-android

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

Opened this issue · 0 comments

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)

  • Device: BE2029 OnePlus Nord N10 5G
  • SDK Level [e.g. Android SDK API Level 30]

Additional context