废话不多说,直接上代码:

public class FiveTextView extends TextView {/** 文字长度 */private float textLength = 0f;/** 滚动条长度 */private float viewWidth = 0f;/** 文本x轴 的坐标 */private float tx = 0f;/** 文本Y轴的坐标 */private float ty = 0f;/** 文本当前长度 */private float temp_tx1 = 0.0f;/** 文本当前变换的长度 */private float temp_tx2 = 0x0f;/** 文本滚动开关 */private boolean isStarting = false;/** 画笔对象 */private Paint paint = null;/** 显示的文字 */private String text = "";/** 文本滚动速度 **/private float sudu;private Paint strokPaint = null;private int strokeWidth;private int a;private int r;private int g;private int b;private int sa;private int sr;private int sg;private int sb;public FiveTextView(Context context, AttributeSet attrs) {super(context, attrs);}/*** 初始化自动滚动条,每次改变文字内容时,都需要重新初始化一次**            显示的内容* @param**/private void init() {strokPaint = new Paint(Paint.ANTI_ALIAS_FLAG);//设置抗锯齿strokPaint.setAntiAlias(true);//设置防抖动strokPaint.setDither(true);//设置填充方式strokPaint.setStyle(Paint.Style.FILL_AND_STROKE);}public void initScrollTextView(WindowManager windowManager, String text,float su,int a,int r,int g,int b,int height,String strokewidth,String strokecolor,int textsize) {// 得到画笔,获取父类的textPaintpaint = this.getPaint();init();if (!"".equals(strokecolor)){String substring = strokecolor.substring(strokecolor.indexOf("(")+1, strokecolor.indexOf(")"));String trim = substring.replaceAll("\\s+","");String[] split1 = trim.split(",");this.sa = 255;this.sr = Integer.parseInt(split1[0]);this.sg = Integer.parseInt(split1[1]);this.sb = Integer.parseInt(split1[2]);}this.a = a;this.r = r;this.g = g;this.b = b;if (!"".equals(strokewidth)){this.strokeWidth = Integer.parseInt(strokewidth);}strokPaint.setTextSize(textsize);// 得到文字this.text = text;this.sudu = su;textLength = paint.measureText(text);// 获得当前文本字符串长度viewWidth = this.getWidth();// 获取宽度return mRight - mLeft;if (viewWidth == 0) {// 获取当前屏幕的属性Display display = windowManager.getDefaultDisplay();viewWidth = display.getWidth();// 获取屏幕宽度  viewWidth 是滚动的开始位置,需要修改的// 可再此入手}tx = textLength;temp_tx1 = viewWidth + textLength;temp_tx2 = viewWidth + new Double(textLength*2.8).intValue();// 自己定义,文字变化多少ty = height/2+this.getTextSize()/2;starScroll();}/*** 开始滚动*/public void starScroll() {// 开始滚动isStarting = true;this.invalidate();// 刷新屏幕}/*** 停止方法,停止滚动*/public void stopScroll() {// 停止滚动isStarting = false;this.invalidate();// 刷新屏幕}/** 重写onDraw方法 */@Overrideprotected void onDraw(Canvas canvas) {if (isStarting) {strokPaint.setTextAlign(Paint.Align.CENTER);strokPaint.setStrokeWidth(strokeWidth);strokPaint.setARGB(sa,sr,sg,sb);canvas.drawText(text, temp_tx1 - tx, ty, strokPaint);// A-Alpha透明度/R-Read红色/g-Green绿色/b-Blue蓝色strokPaint.setARGB(a,r,g,b);strokPaint.setStrokeWidth(0);canvas.drawText(text, temp_tx1 - tx, ty, strokPaint);tx += sudu;// 当文字滚动到屏幕的最左边if (tx > temp_tx2) {// 把文字设置到最右边开始tx = textLength;}this.invalidate();// 刷新屏幕}
//        super.onDraw(canvas);}
} 

在activity中使用:

FiveTextView fiveTextView = new FiveTextView(MainActivity.this, null);
fiveTextView.initScrollTextView(getWindowManager(),"会移动的描边字幕",3,255,98,0,238,350,"2","rgba(255,13,13,1)",30);mParams.x = 0;
mParams.y = 0;
mParams.width = 1000;
mParams.height =350;
wManager.addView(fiveTextView,mParams);

附加:

windowmanager初始化方法:

private void initWindowManager() {wManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);mParams = new WindowManager.LayoutParams();mParams.gravity = Gravity.TOP | Gravity.LEFT;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {mParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;}else {mParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;}mParams.format = PixelFormat.TRANSLUCENT;mParams.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
}

完事,收工!

Android 左飞字幕的实现(带描边)相关推荐

  1. 【Android开发】范例1-实现带描边的圆角图片

    利用学过的BitmapShader渲染类,我们来实现一个带描边的圆角图片. 具体实现: 用来显示自定义的绘图类的布局文件 res/layout/main.xml: <?xml version=& ...

  2. android 背景描边,Android实现带描边的圆角图片

    利用学过的BitmapShader渲染类,我们来实现一个带描边的圆角图片. 具体实现: 用来显示自定义的绘图类的布局文件 res/layout/main.xml: xmlns:tools=" ...

  3. android bitmap 描边,Android如何实现带描边的圆角图片

    Android如何实现带描边的圆角图片 发布时间:2021-04-16 13:53:03 来源:亿速云 阅读:99 作者:小新 这篇文章给大家分享的是有关Android如何实现带描边的圆角图片的内容. ...

  4. Android 自带描边颜色渐变炫酷进度条,面试必知必会

    3. 画第三个圆角矩形作为进度条的最外层(进度层)盖在背景层之上 4. 描边层和背景层颜色可用纯色,进度层为了炫酷可用渐变色 这是实现该自带描边颜色渐变进度条的原理,也是在PS中实现该效果的步骤,同样 ...

  5. android 视频播放器 加载字幕,Android 实现视频字幕Subtitle和横竖屏切换示例

    系统自带的VideoView有些视频格式不支持,那么我们可以用第三方实现的VideoView替代系统的来播放视频,比较流行的有ijkplayer.vitamio. 最近有个需求就是需要给视频添加字幕, ...

  6. Android 讯飞离线语音听写/离线语音识别SDK

    平台 Android + 讯飞离线语音SDK SDK包 下载路径及方法见讯飞官方SDK文档: 离线语音听写 Android SDK 文档 # 在开发者控制台, 可以直接下载SDK. SDK包中的文件结 ...

  7. 讯飞社区android 源码,android 讯飞语音 demo

    [实例简介] android 讯飞语音 demo 博客地址:http://blog.csdn.net/chenshufei2/article/details/8496905 [实例截图] [核心代码] ...

  8. android加载二维码带中间logo

    android加载二维码带中间logo 很简单的,我也是先看了很多博客,然后总结了一下,感谢万能的网友 1导入依赖 //二维码加载依赖 implementation 'com.google.zxing ...

  9. 【板栗糖GIS】——如何下载哔哩哔哩的视频CC字幕为不带时间节点的纯文字

    [板栗糖GIS]--如何下载哔哩哔哩的视频CC字幕为不带时间节点的纯文字 目录 1. 打开edge浏览器或谷歌浏览器 2. 安装油猴插件 3. 安装字幕插件 4. 打开哔哩哔哩视频播放页面,点击字幕 ...

  10. 左飞的十八般武艺上课有感(1)

    搞图像的怎么可以不学习机器学习.抱着这个思想我报名了左飞老师在炼数成金里面的十八般武艺这门课.其实一直想把每次上课的心得与疑惑都记录下来.奈何实在太忙,实验室里面杂七杂八的事太多了.但是学习怎么都不算 ...

最新文章

  1. python之threading模块
  2. mysql 语句怎样修饰约束_MySQL中的约束,添加约束,删除约束,以及一些其他修饰讲解...
  3. [云炬创业基础笔记]第七张创业团队测试9
  4. linux win10虚拟内存,高手解惑win10系统电脑虚拟内存不足的还原技巧
  5. 标杆徐2018 Linux自动化运维实战,标杆徐2018 Linux自动化运维系列⑦: SaltStack自动化配置管理实战...
  6. 顶级程序员的心得 - Coders at Work
  7. Linux系统下MySQL导出数据库和导入数据库的命令
  8. 腾讯优图刷新人体姿态估计国际权威榜单,相关论文被ECCV2020收录
  9. PostgreSQL SPI 中的错误处理
  10. python为什么叫爬虫-python为什么叫爬虫?为什么python开发会突然火起来?
  11. 概率论——几何随机变量
  12. logback 简介
  13. Idea中jclasslib的安装与使用
  14. 移动彩信MM7 API JAVA 样例
  15. vim-airline use patched fonts
  16. 深圳海关计算机应用岗位进面分数,这是深圳国税和海关的进面分数线,看完你还敢报吗?...
  17. Google Interview University - 坚持完成这套学习手册,你就可以去 Google 面试了
  18. C#里封装 继承 多态(包教包会)
  19. 卷积神经网络CNN中1×1卷积作用理解
  20. 音乐现场的未来将被NFT门票主宰?

热门文章

  1. 从传统外企到阿里 P9,这位 Java 工程师经历了什么?
  2. 数据中心的“风火水电”
  3. Unity 移动端简单手势控制(移动,旋转,缩放)
  4. 5.图像,音视频标签
  5. 逆転裁判5android,逆转裁判5安卓-phoenix wright: ace attorney dual destinies官方app2021免费...
  6. 双语不用教 下载地址!!!
  7. PS CC2017安装及破解
  8. problem: ERROR cluster.YarnClientSchedulerBackend: Yarn application has already exited with state
  9. JetBrain全家桶介绍
  10. MySQL 查询统计订单