Android 文字滚动实现
项目中有字幕流显示文字信息的需求,针对这个需求首先想到的是以下两种实现方式
- Android原生TextView控件
- 自定义View
原生TextView实现主要是通过设置ellipsize属性来实现,但是需要处理一下焦点focus问题,并且当文字长度不能撑满TextView的宽度,文字就无法滚动,实际使用限制较多,体验并不好。
那么思路转向通过自定义View实现,一种方式是通过继承View或是SurfaceView,通过算法配合canvas.drawText来实现滚动效果,这种方式建议通过SurfaceView子线程绘制方式实现,这种方式优点就是非常的灵活,可以高度定制一些特效。但是使用过程中发现了两个缺点。
- 单就信息发布类项目来说,硬件规格普遍较低,多为rk,全志系列低端方案,当drawText文字过长时(rk系列1000字左右)会出现绘制错乱,文字重叠问题(可以通过设置文字分段落加载来解决)。
- 这种方式需要自己不断的重新绘制UI,并且代码质量不容易得到保证,很容易导致占用cpu资源过多,这也是不愿意看到的。
那么就考虑通过Android原生的动画来配合textView控件实现,这种不如canvas方式灵活,但相较于自己绘制实现,一是使用属性动画插值器实现算法简单,能够避免一些不必要的问题,二是不会产生文字重叠问题,并且降低了cpu占用率。
在这里记录一下我的实现
主要功能:
- 文字滚动
- 设置滚动方向
- 设置滚动速度
- 设置文字颜色,设置背景颜色
实测Rk3288平台,5000+文字没什么问题