最近在开发中,产品小哥哥说要做个弹幕,然后还要在弹幕走到屏幕中间时,在屏幕中间的位置显示出弹幕的内容(没见过这种奇葩的需求),既然拿到这个需求,那么我们就来看看如何解决这个问题。

首先,解决问题—>弹幕:

在网上有很多弹幕框架,百度一下最多的是烈焰弹幕(DanmakuFlameMaster)框架,B站用的就是这个框架,这个框架内容很全,可以实现很多功能,但是代码写起来起来有点繁琐。但对于我这种懒到极致的人当然是寻求可以实现需求的同时,代码量又少,因此选择了一个轻量级的弹幕框架:easyBarrage。

首先我们来说一下如何使用这个框架:

首先在gradle中加入第三方库,然后syn一下。

导入第三方库

接着在,布局文件中加入:

布局文件

属性说明:

属性说明

Activity中代码如下:

注意这里,由于我重写了框架,因此我需要传多一个参数Activity的参数进去,如果你们只是用原声的框架的话就不用传递这个参数了。

模拟加入弹幕:

点击按钮添加弹幕

注意Barrage对象有多种构造,可以设置字体颜色及是否显示边框,例如

指定字体颜色:

显示边框:

指定颜色及显示边框:

只显示内容:

最后记得在Activity结束的时候调用:

如果你只是想实现这些简单的功能的话下面的话就不用看啦~~

下面就是来实现产品小哥哥奇葩需求的时候了:

1,首先我们把这个框架所需要用到的类全部考下来,新建一个包,放到里面,目录如下:

工程目录

然后布局文件也换成自己的包里的,比如我的是这样:

布局文件

然后打开barrageView,现在要重写这个框架了:

首先看到setBarrage这个方法,首先重写这个方法,这里也就是我之前说的加了一个Activity参数的地方,在里面动态加载一个textView, 由于之前没有加上addView加到ViewGroup中,因此导致显示不出来,各位在动态加载布局控件的时候不要犯我这种低级错误哦。

然后我们看到showBarrage这个方法,仔细看他的源码,发现他是通过一个动画加到textView里的,实现弹幕的滚动。然后,通过handler的死循环实现的textView的出现。那么重头戏来了,我们要如何判断弹幕是否到达屏幕的中间呢?

在他的源码中有对动画进行了监听,动画有三个监听方法,开始时监听,结束时监听,重复时监听,之前曾尝试在结束时进行监听但发现效果并不理想,捕捉到比较慢,因此决定在开始时监听。

1.在开始时监听弹幕的内容

2.延时发送这个弹幕内容

3.将捕捉到的弹幕内容设到之前动态加载的textView控件中。

动画开始时监听,并延时发送

同时修改handle中的代码,捕捉弹幕内容:

捕捉弹幕内容

同时如果要修改弹幕的出现时间,观察源码不难发现是这个变量来控制的:

弹幕出现时间

最后看一下  AnimationHelper  这个类,在这里面可以修改弹幕的速度,通过弹幕的持续时间来修改,同时修改弹幕目视效果,经过测试之后是觉得设置之后弹幕出现比较平滑了,看个人需要吧:

动画效果

至此完成产品的小哥哥的需求啦~~~~

效果图

android 循环弹幕,Android中如何动态获取弹幕内容相关推荐

  1. Android TextView 是否有省略号,动态获取和设置行数

    目录 前言 一.TextView设置最大行与省略号 二.检查文本是否省略 三.实战 前言 最近在做一个效果,就是当文本显示超出2行时,文本末尾出现...(省略号),并且显示一个[展开]的按钮.点击时[ ...

  2. android读取不到自定义颜色属性,android – 如何从AttributeSet中可靠地获取颜色?...

    假设您已经定义了自定义颜色属性,如下所示: 然后在视图的构造函数中,您可以检索如下颜色: public ColorView(Context context,AttributeSet attrs) { ...

  3. android+geturl+方法,浅入浅出Android(014):HTTP GET获取文本内容

    1.建立android项目MyApplication 2.修改布局文件activity_my.xml xmlns:tools="http://schemas.android.com/tool ...

  4. KindEditor中使用val()获取content内容后图片不显示

    场景 使用KindEditor进行图片上传后,在js部分通过.val()获取内容后, 所获取的图片的<imgsrc=""其中img标签与src连接在了一起导致图片不能显示. ...

  5. python爬取js动态网页_Python 爬取网页中JavaScript动态添加的内容(一)

    当我们进行网页爬虫时,我们会利用一定的规则从返回的 HTML 数据中提取出有效的信息.但是如果网页中含有 JavaScript 代码,我们必须经过渲染处理才能获得原始数据.此时,如果我们仍采用常规方法 ...

  6. 【Android 安装包优化】移除无用资源 ( 自动移除无用资源 | 直接引用资源 | 动态获取资源 id | Lint 检查资源 )

    文章目录 一.自动移除无用资源 ( 不推荐使用 ) 二.直接引用资源与动态获取资源 1.直接引用资源 2.动态获取资源 id 三.Lint 检查资源 四.参考资料 一.自动移除无用资源 ( 不推荐使用 ...

  7. android获取控件的id(标识符)-根据控件id获取对应的值或控件名字-动态获取R.string的值

    更多其他页面-自定义View-实用功能合集:点击查看 项目中需要动态获取资源R.string的值,记录一下解决方案. demo链接: link. 直接先上个示例,下面再有详细解说: @Override ...

  8. android Q版本外部存储问题以及获取空间大小问题

    Q版本: 1.在manifest 文件中添加权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_ST ...

  9. 京东android面试题,Android面试题—校招—京东

    1 Fragment声明周期 OnCreateView用于初始化非静态的View 在其中创建View并返回给调用者 OnActivityCreate 当Fragment依存的Activity的 onC ...

最新文章

  1. OpenCV中GPU模块使用
  2. 关于全局缓存的一种简单实现方法
  3. expires为session_面试必问:session,cookie和token的区别
  4. HTML5跑酷网页游戏源码
  5. mysql字段命名_Mysql 01—数据库表字段的命名规则
  6. iOS项目开发实战——通过Http Get方式与server通信
  7. 关联规则(Apriori、FP-grpwth)
  8. 不用代码隐藏自定义列表
  9. 突发奇想-怎么写一个死锁?
  10. EDA技术与应用课笔记
  11. excel复习-数据透视表
  12. 如何画出一张合格的技术架构图?
  13. 2560x1600分辨率高吗_2560x1600是多大尺寸的屏幕
  14. WDS+MDT部署Windows7操作系统2—;导入启动映像和安装映像
  15. 【概率论与数理统计 宋浩】P2(1) 互不相容事件 对立事件
  16. 推荐windows系统10款好用的软件,让你使用体验飞升
  17. 一天写多少行代码才算是好程序员?
  18. 太空射击第15课: 道具
  19. 2021.12.20(第二周) 实习周记lzhuan
  20. 【软件】Tecnomatiox系列软件简介

热门文章

  1. FileZilla 服务器端win server2008以上的配置
  2. 渗透测试入门24之渗透测试参考书、课程、工具、认证
  3. cocos2d 入门必备4个基本概念
  4. JS-面向对象-函数的使用场景---作为其他变量的值 / 作为对象的属性值 / 作为其他函数的参数 / 作为其他函数的返回值 / 作为构造函数(定义对象)
  5. Java中的堆和栈的区别
  6. 05 Django REST Framework 分页
  7. 自动化安装DHCP配置脚本
  8. linux文件系统初始化过程(6)---执行init程序
  9. ruby on rails ajax select
  10. sql单表简单的分页脚本