Android 文字滚动实现,支持显示超长文字

本文探讨了在Android中实现文字滚动的多种方法,包括原生TextView和自定义View。针对TextView的限制,作者转向使用自定义SurfaceView进行文字滚动,但遇到低端硬件设备上的性能问题。最终,通过Android原生动画配合TextView实现了一个更优的解决方案,该方法避免了文字重叠,降低了CPU占用,并能处理大量文字。文章提供了具体实现代码,支持滚动方向、速度和颜色等设置,实测在Rk3288平台上表现稳定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 文字滚动实现

项目中有字幕流显示文字信息的需求,针对这个需求首先想到的是以下两种实现方式

  1. Android原生TextView控件
  2. 自定义View

原生TextView实现主要是通过设置ellipsize属性来实现,但是需要处理一下焦点focus问题,并且当文字长度不能撑满TextView的宽度,文字就无法滚动,实际使用限制较多,体验并不好。

那么思路转向通过自定义View实现,一种方式是通过继承View或是SurfaceView,通过算法配合canvas.drawText来实现滚动效果,这种方式建议通过SurfaceView子线程绘制方式实现,这种方式优点就是非常的灵活,可以高度定制一些特效。但是使用过程中发现了两个缺点。

  1. 单就信息发布类项目来说,硬件规格普遍较低,多为rk,全志系列低端方案,当drawText文字过长时(rk系列1000字左右)会出现绘制错乱,文字重叠问题(可以通过设置文字分段落加载来解决)。
  2. 这种方式需要自己不断的重新绘制UI,并且代码质量不容易得到保证,很容易导致占用cpu资源过多,这也是不愿意看到的。

那么就考虑通过Android原生的动画来配合textView控件实现,这种不如canvas方式灵活,但相较于自己绘制实现,一是使用属性动画插值器实现算法简单,能够避免一些不必要的问题,二是不会产生文字重叠问题,并且降低了cpu占用率。

在这里记录一下我的实现

代码在这里

主要功能:

  1. 文字滚动
  2. 设置滚动方向
  3. 设置滚动速度
  4. 设置文字颜色,设置背景颜色

实测Rk3288平台,5000+文字没什么问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值