让TextView里面的文字逐个显示的动画效果实现

  最近使用TextView时想要实现里面的文字逐个显示的动画效果,就如同打字一样。

  主要实现思想:新建一个TextView的派生类,先将要逐个显示的字符串保存变量 mOriginalStr 中,然后启动新线程,每隔一段时间使用 Handler 类对象的sendEmptyMessage(int what) 方法发送消息,让 Handler 对象将mOriginal中的字符串逐个添加到TextView中进行显示。

  代码实现如下:

 1 /**
 2  * Created by Haoye on 2016/1/15.
 3  */
 4 public class SinglyTextView extends TextView {
 5     private String  mOriginalStr;//------用于保存原始字符串
 6     private long    mDuration = 500;//---默认显示每个字符的时间间隔
 7     private int     mIndex    = 0;//-----记录将要显示的字符的位置
 8     private Handler mHandler;
 9     private final int SHOW_NEXT_CHAR = 1;
10
11   
12     public SinglyTextView(Context context){
13         super(context);
14
15         init();
16         start();
17     }
18
19     public SinglyTextView(Context context, @Nullable AttributeSet attrs){
20         super(context, attrs);
21
22         init();
23         start();
24     }
25
26     public SinglyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr){
27         super(context, attrs, defStyleAttr);
28
29         init();
30         start();
31     }
32
33     private void init() {
34         mOriginalStr = getText().toString();//---保存字符串
35         this.setText("");//-----先清空
36
37         mHandler = new Handler(){
38             @SuppressLint("HandlerLeak")
39             public  void handleMessage(Message msg){
40                 if (msg.what == SHOW_NEXT_CHAR && mIndex < mOriginalStr.length()){
41                     SinglyTextView.this.setText(SinglyTextView.this.getText(). toString()
42                                                + mOriginalStr.charAt(mIndex));
43                     mIndex++;
44                 }
45
46             }
47         };
48     }
49
50     /**
51      * 设置显示每个字符的时间间隔
52      * @param duration
53      */
54     public void setDuration(long duration) {
55         mDuration = duration;
56     }
57
58     /**
59      * 启动新线程
60      */
61     private void start() {
62          new Thread(){
63             public void run()
64             {
65                 while (mIndex < mOriginalStr.length())
66                 {
67                     try {
68                         Thread.sleep(mDuration);
69                         mHandler.sendEmptyMessage(SHOW_NEXT_CHAR);
70                     }
71                     catch (Exception ex){
72                         ex.printStackTrace();
73                     }
74
75                 }
76             }
77         }.start();
78     }
79
80 }

  为何要写三个构造函数这么多?因为在我写了第一个后,在xml文件中运用时出现了这个rendering problem

  如果不重写后两个构造函数,可能有些属性就用不了,于是我就添加了上去了,反正就几行代码。其实在TextView 类中还有一个四个参数的构造函数,不过那个构造函数需要在API 21或以上的版本才能用。

  

时间: 2024-12-20 08:30:41

让TextView里面的文字逐个显示的动画效果实现的相关文章

强大的CSS:文字下波浪线动画效果

之前有至少5个人在评论中询问我文章中链接hover时候波浪下划线动画是怎么实现的,类似下图gif示意: 这里就介绍下是如何实现的. 有两种实现方法,各有优劣. 一.使用径向渐变纯CSS实现 就是使用径向渐变绘制我们的波浪线效果,一个波浪线循环段是有一个朝上的半个圆弧和一个朝下的半个圆弧组合而成的. 所以,我们只要使用径向渐变绘制圆弧,再通过background-position控制两个圆弧的位置,让其前后拼接在一起就可以实现波浪线效果. 相关CSS代码如下: .flow-wave { backg

AngularJS中实现显示或隐藏动画效果的3种方式

本篇体验在AngularJS中实现在"显示/隐藏"这2种状态切换间添加动画效果. 通过CSS方式实现显示/隐藏动画效果 思路: →npm install angular-animage→依赖:var app = angular.module("app",["ngAnimate"]);→controller中一个变量接收bool值→界面中提供一个按钮,点击改变bool值→界面中显示/隐藏的区域提供ng-if和controller中的bool值绑定

jQuery酷炫的文字动画效果代码

jquery css3文字动画特效点击切换文字动态效果 jquery文字动画特效制作淡出淡进文字轮播动画效果代码 jquery文字提示点击按钮触发文字变大消失动画效果 jquery点击按钮淡出淡进动画增加积分数量效果 jquery文字跳舞鼠标滑过段落文字波浪线条跳动 jquery代码控制css background position属性设置文字背景图片动画 jquery文字动画插件制作文字flash动画滤镜效果切换特效

自定义绘制android EditText的背景,定义EditText文字的显示样式

EditText可以通过layer-list来绘制背景: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle" //框为矩形 > &l

Android的TextView使用Html来处理图片显示、字体样式、超链接等

一.[Android实例]实现TextView里的文字有不同颜色 转eoe:http://www.eoeandroid.com/thread-4496-1-1.html import android.text.Html; TextView t3 = (TextView) findViewById(R.id.text3);        t3.setText(            Html.fromHtml(                "<b>text3:</b>  

如何让div中的文字只显示一行,多余的文字隐藏并加上省略号(超链接形式)

写页面的时候遇到了一个小小的问题,如何让div中一行超链接文字只显示一行,多余的文字隐藏并加上省略号,悬浮时隐藏的文字显示出来?解决问题时发现了css3的一个新标签  text-overflow  ,其属性规定当文本溢出包含元素时发生的事情.语法如下: text-overflow: clip|ellipsis|string; 代码如下: <!DOCTYPE html><html><head><meta http-equiv="Content-Type&q

错误记录seterror的文字不显示

今天开发时遇到个小问题,view.seterror的文字由于和theme重叠而无法显示,以前就遇到过,不过想换种方法. 有人说在style里面加<item name="android:textColorPrimaryInverse">@android:color/primary_text_light</item> <style name="AppBaseTheme" parent="@android:style/Theme.L

css3文字溢出显示省略号

text-overflow text-overflow用来设置是否使用一个省略标记(...)标示对象内文本的溢出. 语法: 1 text-overflow:ellipsis;/* 表示省略标记 */ 2 text-overflow:clip;/* 表示剪切 */ 但是text-overflow只是用来说明文字溢出时用什么方式显示,要实现溢出时产生省略号的效果,还须定义强制文本在一行内显示(white-space:nowrap)及溢出内容为隐藏(overflow:hidden),只有这样才能实现溢

TextView 设置部分文字颜色及点击事件SpannableString

设置TextView中一部分文字的颜色及点击事件. SpannableString gotoMsgListStr = new SpannableString("消息列表"); gotoMsgListStr.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { startActivity(new Intent(OrderPayStatusActivity.this, MsgListActivi