android TextView 垂直自动滚动字幕实现
来源:互联网 发布:51单片机串口程序详解 编辑:程序博客网 时间:2024/05/16 01:36
textview 垂直自动滚动字幕实现
前段时间,在网上搜到一个帖子,textview 水平自动滚动字幕的实现,今日项目需要垂直滚动字幕。其实现原理和水品一样。都是重写textview的onDraw方法。
实现垂直自动滚动字幕需要2点需要注意
1.需要根据textview的宽度和字体的大小计算滚动字幕有多少行。实现这个功能,需要重新写两个方法:1.onMeasure,2.onDraw.因为需要获取textview的宽度,于是需要在onMeasure方法里面调用如下代码。具体方法如下:
前段时间,在网上搜到一个帖子,textview 水平自动滚动字幕的实现,今日项目需要垂直滚动字幕。其实现原理和水品一样。都是重写textview的onDraw方法。
实现垂直自动滚动字幕需要2点需要注意
1.需要根据textview的宽度和字体的大小计算滚动字幕有多少行。实现这个功能,需要重新写两个方法:1.onMeasure,2.onDraw.因为需要获取textview的宽度,于是需要在onMeasure方法里面调用如下代码。具体方法如下:
package com.test;public VerticalScrollTextView extends TextView { private float step =0f; private Paint mPaint; private String text; private float width; private List<String> textList = new ArrayList<String>(); //分行保存textview的显示信息。 public VerticalScrollTextView(Context context, AttributeSet attrs) { super(context, attrs); } public VerticalScrollTextView(Context context) { super(context); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = MeasureSpec.getSize(widthMeasureSpec); final int widthMode = MeasureSpec.getMode(widthMeasureSpec); if (widthMode != MeasureSpec.EXACTLY) { throw new IllegalStateException("ScrollLayout only canmCurScreen run at EXACTLY mode!"); } float length = 0; if(text==null|text.length()==0){ return ; } //下面的代码是根据宽度和字体大小,来计算textview显示的行数。 textList.clear(); StringBuilder builder = new StringBuilder(); for(int i=0;i<text.length();i++){ Log.e("textviewscroll",""+i+text.charAt(i)); if(length<width){ builder.append(text.charAt(i)); length += mPaint.measureText(text.substring(i, i+1)); if(i==text.length()-1){ Log.e("textviewscroll",""+i+text.charAt(i)); textList.add(builder.toString()); } }else{ textList.add(builder.toString().substring(0,builder.toString().length()-1)); builder.delete(0, builder.length()-1) ; length= mPaint.measureText(text.substring(i, i+1)); i--; } } } //下面代码是利用上面计算的显示行数,将文字画在画布上,实时更新。 @Override public void onDraw(Canvas canvas) { if(textList.size()==0) return; for (int i = 0; i < textList.size(); i++) { canvas.drawText(textList.get(i), 0, this.getHeight()+(i+1)*mPaint.getTextSize()-step, getPaint()); } invalidate(); step = step+0.3f; if (step >= this.getHeight()+textList.size()*mPaint.getTextSize()) { step = 0; } }}
还有一些扩展功能没有加,比方说滚动的速度设定,滚动多长时间就停止滚动。
发上此帖,有任何建议的朋友,欢迎留言,共同讨论。
具体调用方法 写一个layout文件。如
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="300dp" android:layout_height="400dp" android:orientation="vertical"><com.test.VerticalScrollTextViewandroid:layout_width="200dp" android:layout_height="300dp" android:textSize="20dp" android:text="好雨知时节, 当春乃发生。随风潜入夜, 润物细无声。野径云俱黑, 江船火独明。晓看红湿处, 花重锦官城"/></LinearLayout>
- android TextView 垂直自动滚动字幕实现
- android TextView 垂直自动滚动字幕实现
- android TextView 垂直自动滚动字幕实现
- android TextView 垂直自动滚动字幕实现
- android TextView 垂直自动滚动字幕实现
- android TextView 垂直自动滚动字幕实现TextSwitcher
- Android TextView 垂直自动滚动
- android TextView 垂直自动滚动
- android TextView 垂直自动滚动
- android TextView 垂直自动滚动
- Android 垂直自动滚动的textview
- TextView自动垂直滚动
- android实现TextView垂直或水平滚动
- android实现TextView垂直或水平滚动
- android实现TextView垂直或水平滚动
- android TextView 垂直滚动 用动画实现
- TextView,Button实现滚动字幕
- UI-Label自动垂直滚动字幕
- 【第七章】 对JDBC的支持 之 7.3 关系数据库操作对象化 ——跟我学spring3
- Hibernate(2012/2/27)
- SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结
- linux共享内存的使用--测试程序
- iPhone/iPad开发札记 2012/02/27
- android TextView 垂直自动滚动字幕实现
- 推荐13款JavaScript图形和图表绘制工具
- 设计模式六大原则(6):开闭原则
- Word 2007关闭时出现“已停止工作”的解决方法
- javaMail 代码及实现
- Word 2007 全屏显示及退出的方法
- 一些不错的酷站欣赏的网站
- 简单的IO流---文档内容转移
- android学习笔记35--------------color.xml