Flutter开发HarmonyOS鸿蒙Next应用的时候Texture默认是白色希望是透明色

Flutter开发HarmonyOS鸿蒙Next应用的时候Texture默认是白色希望是透明色
我在鸿蒙原生层通过getTextureRegistry得到textureId、surfaceId,鸿蒙原生层使用surfaceId进行视频渲染,flutter层使用Texture(textureId)展示,整体效果是可以的,只是在视频第一帧画面渲染之前,flutter的Texture是白色的,请问如何将其设置为透明? let textureId = this.flutterPluginBinding.getTextureRegistry().getTextureId() let surfaceTextureEntry = this.flutterPluginBinding.getTextureRegistry().registerTexture(textureId) let surfaceId = surfaceTextureEntry.getSurfaceId().toString()

我尝试过以下方法: const color:ArrayBuffer = new ArrayBuffer(400) let ops:image.InitializationOptions = {size:{width:10,height:10},pixelFormat:image.PixelMapFormat.RGBA_8888,} let pm = await image.createPixelMap(color,ops) this.flutterPluginBinding.getTextureRegistry().setTextureBackGroundPixelMap(textureId,pm) 上面代码可以让Texture变为透明,但是偶现崩溃: Process life time:65s Reason:Signal:SIGSEGV(SEGV_MAPERR)@0x0000796c70657212 Fault thread info: Tid:31230, Name:1.raster #00 pc 000000000006c8b0 /system/lib64/platformsdk/libimage_napi.z.so(OHOS::Media::PixelMapNapiGetImageInfo(OHOS::Media::PixelMapNapi*, OHOS::Media::PixelMapNapiArgs*) (.cfi)+80)(9274c805fe35a2806dba981df88f2cf9) #01 pc 0000000000004cdc /system/lib64/ndk/libpixelmap_ndk.z.so(OH_PixelMap_GetImageInfo.cfi+80)(d5ee74a64b2253d7f73492594d31e757) #02 pc 0000000001a756a0 /data/storage/el1/bundle/libs/arm64/libflutter.so(25c6fbb7ece02f8314308ebb459214f9f92b87cb)

我不确定这个崩溃是否跟我上面的代码有关,请教


更多关于Flutter开发HarmonyOS鸿蒙Next应用的时候Texture默认是白色希望是透明色的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter开发HarmonyOS鸿蒙Next应用的时候Texture默认是白色希望是透明色的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,使用Texture控件时,默认情况下其背景色可能是白色。如果你希望在HarmonyOS(鸿蒙)或其他平台上将其背景设置为透明色,可以通过以下方法实现:

1. 使用 Color 属性

Texture 控件本身没有直接设置背景色的属性,但你可以通过将其包裹在一个 ContainerColoredBox 中,并设置 color 属性为透明色来实现。

Container(
  color: Colors.transparent, // 设置背景为透明
  child: Texture(
    textureId: _textureId, // 你的纹理ID
    filterQuality: FilterQuality.high,
  ),
)

2. 使用 ShaderMaskOpacity

如果你需要更复杂的透明效果,可以使用 ShaderMaskOpacity 控件。

Opacity(
  opacity: 1.0, // 设置为1.0表示完全透明
  child: Texture(
    textureId: _textureId,
    filterQuality: FilterQuality.high,
  ),
)

3. 确保父控件的背景色也是透明的

有时候,Texture 控件的背景色可能会受到父控件的影响。确保父控件的背景色也是透明的。

Scaffold(
  backgroundColor: Colors.transparent, // 设置Scaffold背景为透明
  body: Center(
    child: Texture(
      textureId: _textureId,
      filterQuality: FilterQuality.high,
    ),
  ),
)

4. 检查平台特定设置

在HarmonyOS(鸿蒙)平台上,可能需要检查是否有平台特定的设置或限制。确保在鸿蒙平台上没有额外的背景色设置覆盖了你的透明色设置。

5. 使用 BackdropFilter

如果你需要更复杂的透明效果,可以使用 BackdropFilter 控件。

BackdropFilter(
  filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0),
  child: Texture(
    textureId: _textureId,
    filterQuality: FilterQuality.high,
  ),
)
回到顶部