HarmonyOS 鸿蒙Next类似弹幕效果如何实现

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

HarmonyOS 鸿蒙Next类似弹幕效果如何实现 类似弹幕效果,内容右往左移动,真实效果如图,使用第三方弹幕库文字只能一种颜色,背景也不能自定义,没有API满足,如何实现

2 回复

参考demo如下,需要自行封装

import { KeyboardAvoidMode } from '@kit.ArkUI'
class ControllerClass{
  add = (title:string){}
}
@Entry
@Component
struct DanMuPage {
  aboutToAppear(): void {
    this.getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE)
  }
  @State nowInput:string = ''
  @State controllerClassIns:ControllerClass = new ControllerClass()
  build() {
    Column () {
      DanMu({dmController:this.controllerClassIns })
      Row().layoutWeight(1)
      Flex({justifyContent:FlexAlign.SpaceAround}){
        TextInput({text:$$this.nowInput}).width('80%')
        Button('发送').onClick(() =>{
          this.controllerClassIns.add(this.nowInput)
        })
      }.padding(20)
    }
    .height('100%')
  }
}
@Observed
class dmItemClass {
  textDm:string = ''
}
@Component
struct DanMu {
  @Link dmController:ControllerClass
  @State dmItemList:dmItemClass[] = []
  aboutToAppear(): void {
    this.dmController.add = (title:string)=>{
      this.addText(title)
    }
  }
  build() {
    Column(){
      ForEach(this.dmItemList,(dmItem:dmItemClass,index) =>{
        Row(){
          DanMuItem({dmItem:dmItem})
            .onAppear(() =>{
              console.info("进入onAppear")
            })
        }.width('100%')
        .position({x:0,y:0})
      },(item:dmItemClass,index) =>index.toString())
    }
  }
  /**
   * 增加弹幕
   */
  addText(title:string){
    let ins = new dmItemClass()
    ins.textDm = title
    this.dmItemList.push(ins)
    console.info("进入增加弹幕")
  }
}
@Component
struct DanMuItem{
  @ObjectLink dmItem:dmItemClass
  positionY:number = Math.random() * 200
  build() {
    Row(){
      Row(){
        Text('用户xxx:')
          .fontColor('#FFA500')
        Text(this.dmItem.textDm)
          .fontColor('#FFFFFF')
      }
      .border({width:1})
      .borderColor('#33FFFFFF')
      .borderRadius(15)
      .backgroundColor('#22333333')
      .height(30)
      .padding(5)
    }
    .width('100%')
    .height(40)
    .align(Alignment.Center)
    .translate({x:'-100%'})
    .transition(
      TransitionEffect.translate({x:'200%'}).animation({duration:4000,curve: Curve.Linear})
    )
    .position({
      y:this.positionY?this.positionY:0
    })
  }
}

更多关于HarmonyOS 鸿蒙Next类似弹幕效果如何实现的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中实现类似弹幕效果的功能,可以通过以下步骤进行:

首先,你需要创建一个自定义的视图组件来显示弹幕文本。这个视图组件可以是一个TextView或者更复杂的自定义视图,用于显示弹幕的文本内容、颜色、字体大小等属性。

其次,为了实现弹幕的滚动效果,你可以使用动画或者定时器来不断更新视图组件的位置。例如,可以使用属性动画(Property Animation)来设置视图组件的平移动画,使其从屏幕一侧移动到另一侧。或者,你也可以使用Handler或者ScheduledExecutorService来定时更新视图组件的X轴坐标,从而实现滚动效果。

此外,为了实现多条弹幕同时显示的效果,你可以创建一个弹幕容器,比如一个RecyclerView或者ScrollView,将多个弹幕视图组件添加到这个容器中。然后,通过管理这些视图组件的动画和定时更新,就可以实现类似视频弹幕的滚动效果。

需要注意的是,在实现过程中,你可能需要处理一些性能优化问题,比如减少不必要的布局重绘、使用硬件加速等。

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

回到顶部