花费了不少闲暇的时间,故打算在此总结一下。
老规矩,在写下文之前,我们先看一下效果:
单视图弹幕应用
多视图弹幕例子
ails/93206282)目录
会遇到的坑
-
多视图如何处理
-
如何防碰撞
-
触摸事件如何检测
#_2_总体一览
我们先看一下弹幕的产生过程:
整体并不难, BarrageAdapter负责管理数据, BarrageView负责管理视图,数据被加入 BarrageAdapter后,单线程的线程池控制子 View 的产生速度,定时发送消息给 BarrageAdapterHandler,生成弹幕的子 View 之后经过一些列操作添加进 BarrageView中。
#_3_代码一览
这里,我不会把整段代码都贴上,而是根据弹幕产生过程逐步展开。
1.数据定义
所有弹幕的数据都必须实现 DataSource接口, getType()方法可以帮我们确定视图的布局。
public interface DataSource {
// 返回当前的类型
int getType();
// 返回生成的时间
long getShowTime();
}
2.定义 IBarrageView接口
BarrageView需要实现的方法,让 调用
public interface IBarrageView {
// 添加视图
void addBarrageItem(View view);
// 获取是否存在缓存
View getCacheView(int type);
// 发送View间隔
long getInterval();
// 循环的次数
int getRepeat();
}