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

目录

490dfc605b18

目录

效果展示

490dfc605b18

实现原理

●文字动画

490dfc605b18

●文字换行

490dfc605b18

换行的绘制逻辑如下,遍历文字行数获取到行的索引值,每一行文字的开始绘制的位置都是换行文字索引值集合对应的行的索引值的索引所对应的值,比如第一行开始的位置就是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()

}

控件源码

控件源码:文字动画

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值