@myron-lee
2015-09-01T07:13:49.000000Z
字数 2885
阅读 1652
实习
用于生活圈现场评论显示
将评论以弹幕形势显示
<dependency>
<groupId>com.alipay.android.phone.businesscommon</groupId>
<artifactId>beehive-compositeui</artifactId>
<version>1.3.2.20151015-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
//弹幕的创建采用Builder模式,其中必需参数——弹幕内容以构造器形参形式传入,
//其它非必需参数(有默认值的参数,可自定义的参数)通过对应的函数进行配置。
//示例如下:
//创建一个默认样式的弹幕,弹幕内容为“1584个收藏是闹那样”,对长度不做限制,如需控制在15个字符以内,请在传入之间做截取
BaseDanmaku danmaku1 = new AlipayDanmaku.Builder("1584个收藏是闹那样")
.build();
//此弹幕自定义了显示时间(弹幕从出现到消失所用的时间),默认为3秒
BaseDanmaku danmaku2 = new AlipayDanmaku.Builder("。。。。。。。。。。。。。。。")
.duration(1500)
.build();
//此弹幕自定义了文字颜色,默认为白色
BaseDanmaku danmaku3 = new AlipayDanmaku.Builder(" 暖被窝一次一千円节假日半价 /")
.textColor(Color.YELLOW)
.build();
//此弹幕自定义了文字大小,默认为18dp
BaseDanmaku danmaku4 = new AlipayDanmaku.Builder("1耶耶耶耶耶耶耶耶耶耶耶耶")
.textSize(32)
.build();
//此弹幕自定义了显示时间、文字颜色、文字大小
BaseDanmaku danmaku5 = new AlipayDanmaku.Builder("我是小伙伴! 我是小伙伴!")
.duration(1500)
.textColor(Color.YELLOW)
.textSize(32)
.build();
//现在的弹幕显示逻辑跟流操作很像,具体如下:
// 弹幕打开时,添加弹幕:
// 如果没有弹幕等待显示,弹幕将直接显示
// 如果有弹幕等待显示,此条弹幕排在这些弹幕之后显示
// 弹幕关闭时,添加弹幕,弹幕进入缓冲期,弹幕出现时间由弹幕缓冲区中弹幕数量决定,弹幕打开时,将显示缓冲区中的弹幕
//API:
public void addDanmaku(BaseDanmaku item);
public void addDanmaku(Collection<BaseDanmaku> items);
//示例:
mDanmakuView.addDanmaku(new AlipayDanmaku.Builder("~~~~~~~~~~~~~~~~").textColor(Color.YELLOW).build());
mDanmakuView.addDanmaku(getDanmukus());
private Collection<BaseDanmaku> getDanmukus() {
List<BaseDanmaku> danmakus = new ArrayList<BaseDanmaku>();
for (int i = 0; i < 9; i++) {
danmakus.add(new AlipayDanmaku.Builder("1584个收藏是闹那样")
.build());
danmakus.add(new AlipayDanmaku.Builder("。。。。。。。。。。。。。。。")
.duration(2000)
.build());
danmakus.add(new AlipayDanmaku.Builder(" 暖被窝一次一千円节假日半价 /")
.textColor(Color.YELLOW)
.build());
danmakus.add(new AlipayDanmaku.Builder("1耶耶耶耶耶耶耶耶耶耶耶耶")
.textSize(32)
.build());
danmakus.add(new AlipayDanmaku.Builder("我是小伙伴! 我是小伙伴!")
.duration(1500)
.textColor(Color.YELLOW)
.textSize(32)
.build());
}
return danmakus;
}
//显示
mDanmakuView.show();
//隐藏
mDanmakuView.hide();
//toggle
if (v == mBtnToggleDanmaku) {
if (mDanmakuView.isShown()) {
mDanmakuView.hide();
mBtnToggleDanmaku.setText("打开弹幕");
} else {
mDanmakuView.show();
mBtnToggleDanmaku.setText("关闭弹幕");
}
}
//示例
@Override
protected void onPause() {
super.onPause();
if (mDanmakuView != null && mDanmakuView.isPrepared()) {
mDanmakuView.pause();
}
}
@Override
protected void onResume() {
super.onResume();
if (mDanmakuView != null && mDanmakuView.isPrepared() && mDanmakuView.isPaused()) {
mDanmakuView.resume();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mDanmakuView != null) {
// dont forget release!
mDanmakuView.release();
mDanmakuView = null;
}
}
可以通过调整两条弹幕的间隔时间来控制。默认两条弹幕间隔200ms,间隔时间越长,弹幕密度越低。注意!设置只对之后添加到弹幕视图的弹幕起效。
//示例
if(v == mBtnRaiseDensity){
mDanmakuView.setDanmukuInterval(mDanmakuView.getDanmukuInterval()-40);
} else if (v == mBtnReduceDanmaku){
mDanmakuView.setDanmukuInterval(mDanmakuView.getDanmukuInterval()+40);
}
技术支持:九二