android TextView 垂直自动滚动字幕实现
参考网上一些做法然后进行了修改,
首先继承TextView
/**
* VerticalScrollTextView.java
* 版权所有(C) 2013
* 创建者:cuiran 2013-12-9 下午2:48:55
*/
package com.cayden.videodemo.view;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;
/**
* TODO
* @author cuiran
* @version 1.0.0
*/
public class VerticalScrollTextView extends TextView {
private float step =0f;
private Paint mPaint=new Paint(); ;
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!");
}
text=getText().toString();
if(text==null|text.length()==0){
return ;
}
//下面的代码是根据宽度和字体大小,来计算textview显示的行数。
textList.clear();
StringBuilder builder =null;
for(int i=0;i<text.length();i++){
if(i%12==0){
builder = new StringBuilder();
}
if(i%12<=11){
builder.append(text.charAt(i));
}
if(i%12==11){
textList.add(builder.toString());
}
}
Log.e("textviewscroll",""+textList.size());
}
//下面代码是利用上面计算的显示行数,将文字画在画布上,实时更新。
@Override
public void onDraw(Canvas canvas) {
if(textList.size()==0) return;
mPaint.setTextSize(40f);//设置字体大小
for(int i = 0; i < textList.size(); i++) {
canvas.drawText(textList.get(i), 0, this.getHeight()+(i+1)*mPaint.getTextSize()-step+30, mPaint);
}
invalidate();
step = step+0.3f;
if (step >= this.getHeight()+textList.size()*mPaint.getTextSize()) {
step = 0;
}
}
}
然后写布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#eee"
android:orientation="vertical" >
<com.cayden.videodemo.view.VerticalScrollTextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="20dp"
android:text="好雨知时节,当春乃发生.随风潜入夜,润物细无声.野径云俱黑,江船火独明.晓看红湿处,花重锦官城."/>
</LinearLayout>
然后自己写个Activity就可以了。
android TextView 垂直自动滚动字幕实现的更多相关文章
- android TextView 垂直滚动 用动画实现
项目中需要让TextView 滚动一会显示一行一会显示一行 想了下用移动动画实现.但是实际中在整这个动画时调了好久.主要用到的动画方式是移动动画:TranslateAnimation 代码: PS: ...
- android禁止ScrollView自动滚动
当Scrollview嵌套listview,或者子View的内容过多时,当内容加载完成后,ScrollView中内容的长度会发生改变,ScrollView会自动往下滚动,解决办法:在ScollView ...
- 安卓自定义TextView实现自动滚动
xml文件代码 <com.mobile.APITest.ScrollEditText android:id="@+id/statusEditText" android:lay ...
- Android textView点击滚动(跑马灯)效果
布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...
- Android 如何实现带滚动条的TextView,在更新文字时自动滚动到最后一行?
1.在布局文件中放置一个TextView,给它添加scrollbars和fadeScrollbars两个属性. 如下设置:滚动条为垂直滚动条,并且一直可见(当TextView中的文字行数超过页面能显示 ...
- Android:TextView 自动滚动(跑马灯) (转)
Android:TextView 自动滚动(跑马灯) TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true ...
- Android TextView文字横向自动滚动(跑马灯)
TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true" 2.设置可滚到,或显示样式:android: ...
- Android 文字自动滚动(跑马灯)效果的两种实现方法[特别好使]
有时候在xml中写的跑马灯效果不滚动:原因有以下 Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize=”marquee” 2.TextV ...
- Android文字跑马灯控件(文本自动滚动控件)
最近在开发一个应用,需要用到文本的跑马灯效果,图省事,在网上找,但老半天都找不到,后来自己写了一个,很简单,代码如下: import android.content.Context; import a ...
随机推荐
- Python 3 智能发音
真是十分神奇.. import win32com.client import time s = win32com.client.Dispatch("SAPI.SpVoice") s ...
- Java 8 新特性之 Lambda表达式
Lambda的出现就是为了增强Java面向过程编程的深度和灵活性.今天就来分享一下在Java中经常使用到的几个示例,通过对比分析,效果应该会更好. – 1.实现Runnable线程案例 其存在的意义就 ...
- SQL Server性能优化——等待——SLEEP_BPROOL_FLUSH
前言: 有一个用于历史归档的数据库(简称历史库),经过一定时间的积累,数据文件已经达到700多GB,后来决定某些数据可以不需要保留,就把这部分数据truncate了,空余出600多GB的空间,也就是说 ...
- 同步图计算:GraphLite的安装和使用
http://blog.csdn.net/pipisorry/article/details/51350908 export HADOOP_HOME=/usr/local/hadoop-2.6.4ex ...
- 剑指Offer——回溯算法
剑指Offer--回溯算法 什么是回溯法 回溯法实际是穷举算法,按问题某种变化趋势穷举下去,如某状态的变化用完还没有得到最优解,则返回上一种状态继续穷举.回溯法有"通用的解题法"之 ...
- UNIX网络编程——客户/服务器心搏函数
阅读此博客时,可以参考以前的博客<<UNIX网络编程--socket的keep-alive>>和<<UNIX网络编程--套接字选项(心跳检测.绑定地址复用)> ...
- Dynamics CRM 修改数据导出到EXCEL的最大条数
系统默认的最大导出数为一万,这个数可以通过执行以下SQL看到,那要增加导出的最大数量改变MaxRecordsForExportToExcel的值即可. <span style="fon ...
- Dynamics CRM 2015 站点地图公告配置实体显示名称的变更
CRM更新2015后,在设置里找不到公告配置了 在原来的位置上你会东西一个叫活动源配置的东西,点开看后就是原来的公告配置.
- CentOS上PHP完全卸载
想把PHP卸载干净,直接用yum的remove命令是不行的,需要查看有多少rpm包,然后按照依赖顺序逐一卸载. 1.首先查看机器上安装的所有php相关的rpm包 [root@localhost ngi ...
- iOS开发之八:UISlider、UISegmentedControl、UIPageControl的使用
本文的三种控件,用的也非常多,而我也是经常图懒,而去打开原来的项目去拷贝,现在记录一下,就不用去项目中去找这些控件的用法了. 一.UIActivityIndicatorView 的使用 UIActiv ...