java返回一个不确定的实体类_教你写一个弹幕库,确定不了解一下?

本文作者

作者:TeaOf

链接:

https://juejin.im/post/5cbc532de51d456e5e035f42

本文由作者授权发布。

1 前言

最近刚写完了一个弹幕库 Muti-Barrage,它具有如下功能:

  • 自定义多视图(弹幕必备)

  • 碰撞检测

  • 检测触摸事件

  • 设置发送间隔

  • 设置速度生成区间

  • 循环播放

花费了不少闲暇的时间,故打算在此总结一下。

老规矩,在写下文之前,我们先看一下效果:

单视图弹幕应用

173fa44f1fe8bb3789648a4def9bc2b6.gif

多视图弹幕例子

adb62d5ee4c096782b090c712447fc35.gif

目录

bd3f5b4ff1f35e323f6cd032cd2cb4fb.png

会遇到的坑

  1. 多视图如何处理

  2. 如何防碰撞

  3. 触摸事件如何检测

2 总体一览

我们先看一下弹幕的产生过程:

b44ab279a21fab21d86870011151519a.png

整体并不难, 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();
}
3.数据添加

为了约束数据类型,我们需要在 BarrageAdapter使用范型,也就是

public abstract class BarrageAdapter<T extends DataSource>implements View.OnClickListener {
    
}

下面我们从数据的添加入口讲起:

/**
 * 添加一组数据
 *
 * @param dataList 一组数据
 */
public void addList(List dataList) {
    if (dataList == null || dataList.size() == 0)
        return;
    int len = dataList.size();
    mDataList.addAll(dataList);
    mService.submit(new DelayRunnable(len));
}

mDataList是我们存放数据的 Li

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值