最近项目需求实现一个简单的聊天室弹幕效果,所以自己就手动写了一个简单的view,在这里如果写的不好,还望大神勿怪.
首先思路是: 类似弹幕这种 就是从左往右移动的效果,那么就涉及到Android动画里面的TranslateAnimation
TranslateAnimation 详解
这里我们简单介绍下,就当做回顾一下
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta);复制代码
由上面我们可以看出TranslateAnimation有四个参数
float fromXDelta 动画开始的点离当前View X坐标上的差值
float toXDelta 动画结束的点离当前View X坐标上的差值
float fromYDelta 动画开始的点离当前View Y坐标上的差值
float toYDelta 动画开始的点离当前View Y坐标上的差值
好吧,这样解释可能有点懵,那我们简单举个例子,fromXDelta就是你view初始的x坐标,fromYDelta就是你初始的Y坐标,
比如我的初始的位置是(0,0,0,0) ,我们想要向右移动10个单位,那么移动后的就是(0,10,0,0)....复制代码
那么我们要实现弹幕的效果,如何去思考怎样去实现动画呢?
一般的弹幕,都是从右向左逐渐消失,那么我的x的坐标的起点就是屏幕的宽度
这里我们可以通过
getResources().getDisplayMetrics().widthPixels复制代码
拿到我们屏幕的宽度 这个也就是我们的X坐标,那么要移动后的坐标呢?我们会实现从右向左逐渐消失的过程,
所以我们移动后的x坐标就是-getResources().getDisplayMetrics().widthPixels, 这里有个思考为什么不是 0 呢?
好了前期思路已经明了,接下来代码开工~~
首先我们写一个VIEW 继承RelativeLayout 或者LinearLayout 都可以
弹幕根据需求进行相应参数设置,比如行高 速度,以及相邻弹幕出现的时间,又例如文字,颜色等一些设置,当然我们同样可以在layout里面进行设置.
下面主要是几个主要方法,可以根据需求动态设置
初始化数据:
初始化弹幕:
弹幕移动动画:
这里就用到我们上面所讲的TranslateAnimation moveSpeed参数可以设置弹幕的移动速度,这里以后我们可以扩展很多的业务(比如,付费购买加速,减速等道具,或者变颜色等....哈哈哈)
开始弹幕:
这个就是启动我们弹幕的方法
好了我们简单的弹幕就封装好了
接下来在我们需要的地方调用
setDatas方法即可..
实现效果如下:
大功告成,这个是个简易的 非常适合小需求的,嘻嘻嘻~
下面是github的项目地址 有兴趣的同学可以下载看下
github.com/luyaoY/DanM…