HarmonyOS 鸿蒙Next如何控制gif图播放次数,或者获取gif图最后一帧啥的

发布于 1周前 作者 bupafengyu 来自 鸿蒙OS

HarmonyOS 鸿蒙Next如何控制gif图播放次数,或者获取gif图最后一帧啥的

项目中需要获取到gif动图的播放完毕的回调,只需要播放一次,gif图片地址是网络地址

3 回复

可以使用第三方库gif-drawable,支持Gif渲染及控制 的相关功能。

详见https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Fgif-drawable

参考Demo:

//demo.ets
import { GIFComponent, ResourceLoader } from '[@ohos](/user/ohos)/gif-drawable'
import { image } from '@kit.ImageKit';

@Entry
@Component
struct Index {
  // gif绘制组件用户属性设置
  @State model: GIFComponent.ControllerOptions = new GIFComponent.ControllerOptions();
  // 是否自动播放
  @State gifAutoPlay: boolean = true;
  @State imagePixelMap: image.PixelMap | undefined = undefined
  @State gifReset: boolean = false;

  async aboutToAppear() {
    let modelx: GIFComponent.ControllerOptions = new GIFComponent.ControllerOptions();
    modelx.setScaleType(GIFComponent.ScaleType.FIT_CENTER)
      .setSpeedFactor(1)
      .setOpenHardware(true)
      .setLoopFinish((loopTime:number)=>{
        console.log('GIF 动图播放完毕');
        // 设置 gifAutoPlay 为 false 以停止播放
        this.gifAutoPlay = false
      })
    modelx.getLoopFinish()
    ResourceLoader.loadMedia($r('app.media.gifExample').id, getContext(this)).then((buffer: ArrayBuffer) => {
      modelx.loadBuffer(buffer, (err?: string) => {
        if (err) {
          console.log('loadMediaByWorker error =' + err)
        }
        console.log('loadMedia加载解析成功回调绘制!')
        this.model = modelx;
      })
    })
  }

  build() {
    Row() {
      Column() {
        Text('GIF显示')
        Button('start').onClick(()=>{
          this.gifAutoPlay = true;
        })
        GIFComponent({model:$model, autoPlay:$gifAutoPlay, resetGif: $gifReset})

          .width(300)
          .height(300)
          .backgroundColor(Color.Gray)
      }
      .width('100%')
    }
    .height('100%')
  }
}
gif图片是远程链接

在HarmonyOS鸿蒙Next中,控制GIF图播放次数或获取GIF图最后一帧,可以通过以下方式实现:

控制GIF图播放次数

  1. 使用Image组件:Image组件支持加载GIF图,但默认只播放一次。要实现重复播放,需借助其他方法。
  2. 引入第三方库:如ohos_gif-drawable库,该库提供了更多的控制选项,包括设置播放次数。
  3. 使用AnimatedDrawableDescriptor:通过加载PixelMap数组动画来控制GIF播放,可以设置循环次数。
  4. 使用ImageAnimator:虽然主要用于帧动画,但也可以用来播放GIF,并控制播放次数。

获取GIF图最后一帧

  1. 解析GIF文件:需要解析GIF文件的格式,提取出所有帧。
  2. 获取最后一帧:在解析后的帧数组中,取最后一个元素即为GIF的最后一帧。

以上方法可能需要一定的编程基础和对HarmonyOS API的了解。如果在实际操作中遇到问题,建议查阅HarmonyOS的官方文档或开发者社区,以获取更详细的指导。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部