基于Android淡入淡出弹幕实现

本文详细介绍了在Android中实现淡入淡出弹幕的三种方法:属性动画和Canvas绘制。针对属性动画的实现,讨论了如何管理BarrageItemView和属性动画,以及如何处理多线程访问问题。Canvas绘制方案则通过设置paint的alpha值来控制弹幕的淡入淡出,解决了图片加载问题,并分析了各方案的性能表现。
摘要由CSDN通过智能技术生成

        最近遇到需求,需要在某张用户发表的图片中展示评论,方式是以淡入淡出的弹幕形式。需求为淡入事件t1->淡出t2,所有弹幕依次开始播放,中间一定的时间间隔deltaT。仔细考虑之后,想到以下实现方式,现总结下来并进行实现、分析以及比较。

        不妨认定弹幕的画布为BarrageView;每条弹幕的绘制为BarrageItemView。

  •  属性动画

从只有一条弹幕开始思考,我们需要设计一个属性动画,负责淡入:

在该动画的完成回调函数onAnimationEnd中启动淡出动画,在淡出动画的完成回调函数中,对该BarrageItemView进行remove操作,这样就完成了一条弹幕的显示过程。

         多条弹幕展示时也是同样的逻辑。

         使用这种方法,弹幕的依次播放在实现上是一个难点:我们需要另开一个通知线程(计时器),在每隔deltaT时间,对BarrageView(弹幕画布)进行通知,告诉它你可以播放一条新的弹幕了。

于是在每个BarrageView中我们需要建一个handle来对通知消息进行处理,当BarrrageView是作为ListView或者RecyclerView的一个Item时,通过用户的活动,可能会展示大量的BarrageView,这样会构建出大量的Handler,对系统性能也是一个挑战。不过如果处于RecyclerViewItem中,在RecyclerViewViewHolder进行重用时,也可以在Handler实现中进行判断和重用,以最大程度减少资源浪费。这样的实现方法会出现一些的问题:太多的BarrageItemView和属性动画的创建。这样的做法不仅会影响应用的性能,而且每条弹幕和属性动画的管理都会对代码实现提出挑战。

         另一个需要注意的点是,弹幕动画往往不是稳定的从开始播放到结束,用户可以进行暂停、关闭、打开弹幕等操作。这一系列管理功能决定了我们在使用属性动画时必须记录每个当前正在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值