Android超简单实现打字动画效果

目录

目录

效果展示

实现原理

●文字动画



●文字换行



换行的绘制逻辑如下,遍历文字行数获取到行的索引值,每一行文字的开始绘制的位置都是换行文字索引值集合对应的行的索引值的索引所对应的值,比如第一行开始的位置就是0,第二行开始的位置则是上一行换行字符的索引值了。
 if(mTextLineCountList.size>0){
            for(i in 1..mTextLine){//遍历行数(行数从1开始)
                if(mAnimProgress>mTextLineCountList[i-1]){//只有当动画所对应的值大于文字开始绘制的文字索引的时候才开始绘制。这是为了避免因行数超过一行的时候出现的文字绘制的开始位置比结束位置大的情况。
                    canvas!!.drawText(mText,mTextLineCountList[i-1],mAnimProgress,0f,(mPaint.fontMetrics.bottom-mPaint.fontMetrics.top)*i,mPaint)
                }
            }
        }

控件的使用

这里我没有进行自定义属性的添加,只是添加了两个简单的方法:
●setAnimText:设置动画文字

fun setAnimText(animText:String){
        mText = animText
        calcStrlineCount()
        requestLayout()//重新计算控件高度,否则控件的高度不会发生变化
    }

●startAnim:开始动画

fun startAnim(){
        mAnimator = ValueAnimator.ofInt(1, mText.length)
        mAnimator!!.interpolator = LinearInterpolator()//匀速动画
        mAnimator!!.duration = (mSingleTextAnimDuration * mText.length).toLong()//mSingleTextAnimDuration是每个文字动画的时间,这里乘以字符串的长度就得出了整个文字动画的时间了
        mAnimator!!.addUpdateListener {
            mAnimProgress = it.animatedValue as Int
            invalidate()
        }
        mAnimator!!.start()
    }

●Activity中进行调用

bt_startanim.setOnClickListener {
            atv.setAnimText("我是动画文字啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦哈哈哈哈")
            atv.startAnim()
        }

控件源码

控件源码:文字动画

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【Android 动画】 动画分类补间动画(Tween动画)帧动画(Frame 动画)属性动画(Property ...
    Rtia阅读 6,268评论 1 38
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,663评论 0 17
  • 一、简历准备 1、个人技能 (1)自定义控件、UI设计、常用动画特效 自定义控件 ①为什么要自定义控件? Andr...
    lucas777阅读 5,275评论 2 54
  • 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让全面说说Android的动画,所以今...
    未聞椛洺阅读 2,771评论 0 10
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32