代码拉取完成,页面将自动刷新
DanmakuFlameMaster是一款弹幕框架,支持发送纯文本弹幕、设置弹幕在屏幕的显示区域、控制弹幕播放状态等功能
ohpm install @ohos/danmakuflamemaster
OpenHarmony ohpm环境配置等更多内容,请参考 如何安装OpenHarmony ohpm包
this.model.setWidth(lpx2px(720))
this.model.setHeight(lpx2px(720))
let maxLinesPair: Map<number, number> = new Map();
maxLinesPair.set(BaseDanmaku.TYPE_SCROLL_RL, 5);
let overlappingEnablePair: Map<number, boolean> = new Map();
overlappingEnablePair.set(BaseDanmaku.TYPE_SCROLL_RL, true);
overlappingEnablePair.set(BaseDanmaku.TYPE_FIX_TOP, true);
this.mContext = DanmakuContext.create();
this.mContext.setDanmakuStyle(DANMAKU_STYLE_STROKEN, 3)
.setDuplicateMergingEnabled(false)
.setScrollSpeedFactor(1.2)
.setScaleTextSize(1.2)
.setCacheStuffer(new SpannedCacheStuffer(), this.mCacheStufferAdapter) // 图文混排使用SpannedCacheStuffer
.setMaximumLines(maxLinesPair)
.preventOverlapping(overlappingEnablePair)
.setDanmakuMargin(40);
let that = this
if (this.model != null) {
this.mParser = this.createParser();
this.model.setCallback(new Call(that));
this.model.setOnDanmakuClickListener(new OnDanMu(that))
this.model.prepare(this.mParser, this.mContext);
this.model.showFPS(true);
}
class Call implements Callback {
private that: ESObject;
constructor(that: ESObject) {
this.that = that
}
public updateTimer(timer: DanmakuTimer): void {
}
public drawingFinished(): void {
}
public danmakuShown(danmaku: BaseDanmaku): void {
}
public prepared(): void {
this.that.model.start();
}
}
class OnDanMu implements OnDanmakuClickListener {
private that:ESObject;
constructor(that :ESObject) {
this.that = that
}
onDanmakuClick(danmakus: IDanmakus): boolean{
console.log('DFM onDanmakuClick: danmakus size:' + danmakus.size())
let latest: BaseDanmaku = danmakus.last()
if (null != latest) {
console.log('DFM onDanmakuClick: text of latest danmaku:' + latest.text)
return true
}
return false
};
onDanmakuLongClick(danmakus: IDanmakus): boolean{
return false
};
onViewClick(view: IDanmakuView): boolean{
this.that.isVisible = true
return false
};
}
let danmaku: BaseDanmaku = this.mContext.mDanmakuFactory.createDanmaku(BaseDanmaku.TYPE_SCROLL_RL);
danmaku.text = "这是一条弹幕" + SystemClock.uptimeMillis();
danmaku.padding = 5;
danmaku.priority = 0; // 可能会被各种过滤器过滤并隐藏显示
danmaku.isLive = isLive.valueOf();
danmaku.setTime(this.model.getCurrentTime() + 1200);
danmaku.textSize = 25 * (this.mParser.getDisplayer().getDensity() * 0.8);
danmaku.textColor = 0xffff0000;
danmaku.textShadowColor = 0xffffffff;
danmaku.borderColor = 0xff00ff00;
this.model.addDanmaku(danmaku);
model: DanmakuView.Model = new DanmakuView.Model()
model.addDanmaku(danmaku)
model.getCurrentTime()
model.hide()
model.show()
model.pause()
model.resume()
model.setWidth(lpx2px(1280))
model.setHeight(lpx2px(720))
model.prepare(this.mParser, this.mContext)
model.showFPS(true)
model.setOnDanmakuClickListener()
DanmakuContext()
public static create(): DanmakuContext
public getBaseComparator(): BaseComparator
public setBaseComparator(baseComparator: BaseComparator)
public getDisplayer(): AbsDisplayer<ESObject, ESObject>
public setTypeface(font: string): DanmakuContext
public setDanmakuTransparency(p: number): DanmakuContext
public setScaleTextSize(p: number): DanmakuContext
public setDanmakuMargin(m: number): DanmakuContext
public setMarginTop(m: number): DanmakuContext
public getFTDanmakuVisibility(): boolean
public setFBDanmakuVisibility(visible: boolean): DanmakuContext
public getL2RDanmakuVisibility(): boolean
public setL2RDanmakuVisibility(visible: boolean): DanmakuContext
public getR2LDanmakuVisibility(): boolean
public setR2LDanmakuVisibility(visible: boolean): DanmakuContext
public getSpecialDanmakuVisibility(): boolean
public setSpecialDanmakuVisibility(visible: boolean): DanmakuContext
public setMaximumVisibleSizeInScreen(maxSize: number): DanmakuContext
public setDanmakuStyle(style: number, ...values: number[]): DanmakuContext
public setDanmakuBold(bold: boolean): DanmakuContext
public setColorValueWhiteList(colors: number[]): DanmakuContext
public getColorValueWhiteList(): number[]
public setUserHashBlackList(hashes: string[]): DanmakuContext
public removeUserHashBlackList(hashes: string[]): DanmakuContext
public addUserHashBlackList(hashes: string[]): DanmakuContext
public getUserHashBlackList(): string[]
public blockGuestDanmaku(block: boolean): DanmakuContext
public setScrollSpeedFactor(p: number): DanmakuContext
public setDuplicateMergingEnabled(enable: boolean): DanmakuContext
public isDuplicateMergingEnabled(): boolean
public alignBottom(enable: boolean): DanmakuContext
public isAlignBottom(): boolean
public setMaximumLines(pairs: Map<number, number>): DanmakuContext
public setOverlapping(pairs: Map<number, boolean>): DanmakuContext
public isMaxLinesLimited(): boolean
public isPreventOverlappingEnabled(): boolean
public setDanmakuSync(danmakuSync: AbsDanmakuSync): DanmakuContext
public setCacheStuffer(cacheStuffer: BaseCacheStuffer, cacheStufferAdapter: Proxy): DanmakuContext
public registerConfigChangedCallback(listener: ConfigChangedCallback): void
public unregisterConfigChangedCallback(listener: ConfigChangedCallback): void
public registerFilter(filter: BaseDanmakuFilter<ESObject>): DanmakuContext
public unregisterFilter(filter: BaseDanmakuFilter<ESObject>): DanmakuContext
public resetContext(): DanmakuContext
Proxy()
public abstract prepareDrawing(danmaku: BaseDanmaku, fromWorkerThread: boolean)
public abstract releaseResource(danmaku: BaseDanmaku)
DanmakuTimer()
public update(curr: number): number
public add(mills: number): number
public getLastInterval(): number
Duration()
public setValue(initialDuration: number)
public setFactor(f: number)
SpecialDanmaku()
public getLeft(): number
public getTop(): number
public getRight(): number
public getBottom(): number
public getType(): number
public setTranslationData(beginX: number, beginY: number, endX: number, endY: number, translationDuration: number, translationStartDelay: number)
public setAlphaData(beginAlpha: number, endAlpha: number, alphaDuration: number)
DanmakuUtils()
public static compare(obj1: BaseDanmaku, obj2: BaseDanmaku): number
public static isDuplicate(obj1: BaseDanmaku, obj2: BaseDanmaku): boolean
public static create(): DanmakuFactory
在下述版本验证通过:
|---- DanmakuFlameMaster
| |---- entry # 示例代码文件夹
| |---- library # DanmakuFlameMaster库文件夹
| |---- src\main\ets\components\common\master\flame\danmaku # 源代码文件夹
| |---- control # 弹幕状态控制实现
| |---- danmaku # 弹幕基础类库
| |---- ui # 弹幕自定义显示控件
| |---- index.ets # 对外接口
| |---- README.md # 安装使用方法
使用过程中发现任何问题都可以提 Issue 给我们,当然,我们也非常欢迎你给我们发 PR 。
本项目基于 Apache License 2.0 ,请自由地享受和参与开源。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。