Android最实用TextView文字逐个打出效果
来源:互联网 发布:ip广播软件 编辑:程序博客网 时间:2024/05/22 12:40
对于文字逐个打出效果,我们一下子想到的做法可能都是弄一个for循环,不断更改文本内容。
这法子表面看起来可以,但实际实用起来问题多多,比如对于多行居中对齐的文本,打出效果就不是渐进出来,因为受到对齐和换行的影响,随着文字增多,文本布局会不断变化。
下面看最实用和稳定的文字逐个打出效果自定义组件FadeInTextView。
1、FadeInTextView完全继承TextView的所有特性,没有任何负面影响,使用FadeInTextView就像使用TextView一样;
2、简单设置出效果:
(1)setFadeInDuration:设置打出效果总共时长;
(2)setMoveUnitLength:设置渐进步长为几个字符,默认为1;
(3)setFadeInMaskColor:设置遮罩颜色,即未显示文字区域的颜色。
完整源码如下:
import java.util.ArrayList;import java.util.List;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Rect;import android.text.Layout;import android.util.AttributeSet;import android.widget.TextView;public class FadeInTextView extends TextView {private static final int DEFAULT_UNIT_LENGTH = 2;private static final int DEFAULT_DURATION = 3820;private List<Rect> lineRects = new ArrayList<Rect>();private int duration = DEFAULT_DURATION;private int moveUnitLength;private int fromLine = 0;private int moveCount;private int fromStart;private int maskColor;private Paint paint;private FadeInListener fadeInListener;private volatile boolean fadeInFinished = false;private boolean hasCallListener = false;public FadeInTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}public FadeInTextView(Context context, AttributeSet attrs) {super(context, attrs);}public FadeInTextView(Context context) {super(context);}public boolean isFadeInFinished() {return fadeInFinished;}public void setFadeInDuration(int duration) {this.duration = duration;}public int getFadeInDuration() {return duration;}public void setMoveUnitLength(int moveUnitLength) {this.moveUnitLength = moveUnitLength;}public void setFadeInMaskColor(int maskColor) {this.maskColor = maskColor;}public void setFadeInListener(FadeInListener fadeInListener) {this.fadeInListener = fadeInListener;}public void activateFadeInListener() {this.hasCallListener = false;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (lineRects.isEmpty()) {getLineRects();if (fadeInListener != null && !hasCallListener) {fadeInListener.onFadeInStart(this);}}if (paint == null) {paint = new Paint();paint.setColor(maskColor);paint.setAntiAlias(true);paint.setStyle(Style.FILL);}for (int i = fromLine; i < lineRects.size(); i++) {Rect rect = new Rect(lineRects.get(i));if (i == fromLine) {rect.left = fromStart;}canvas.drawRect(rect, paint);}if (!computeNextFrame()) {fadeInFinished = true;if (fadeInListener != null && !hasCallListener) {fadeInListener.onFadeInEnd(this);hasCallListener = true;}return;}postDelayed(new Runnable() {@Overridepublic void run() {invalidate();}}, duration / moveCount);}private boolean computeNextFrame() {if (lineRects.size() <= fromLine) {return false;}Rect currentLineRect = lineRects.get(fromLine);if (fromStart >= currentLineRect.right) {return false;}fromStart = fromStart + moveUnitLength;if (fromStart >= currentLineRect.right) {fromLine++;if (lineRects.size() > fromLine) {fromStart = lineRects.get(fromLine).left;} else {fromStart = 0;}}return true;}private void getLineRects() {Layout layout = getLayout();if (layout == null) {return;}int lineCount = layout.getLineCount();int totalLength = 0;for (int i = 0; i < lineCount; i++) {Rect rect = new Rect();rect.left = (int) layout.getLineLeft(i);rect.right = (int) layout.getLineRight(i);rect.top = layout.getLineTop(i);rect.bottom = layout.getLineBottom(i);if (i == 0) {fromStart = rect.left;}lineRects.add(rect);totalLength = totalLength + rect.width();}if (moveUnitLength <= 0) {moveUnitLength = DEFAULT_UNIT_LENGTH;}moveCount = totalLength / moveUnitLength;if (moveCount <= 0) {moveCount = 1;}}public static interface FadeInListener {public void onFadeInStart(TextView tv);public void onFadeInEnd(TextView tv);}}
国际惯例
————————————————————————————————————————————————————————
作者:薄荷记账 (转载请注明原作者)
简洁 稳定 优雅 无限可能!
1 0
- Android最实用TextView文字逐个打出效果
- TextView实现文字一个一个打出,逐个打出TextView里面的文字
- Android TextView 文字飞入效果
- Android TextView 显示文字阴影效果
- android 用textview实现文字滚动效果
- android显示TextView文字的倒影效果
- android显示TextView文字的倒影效果
- android TextView 实现自定义文字点击效果
- android TextView中文字的阴影效果
- Android显示TextView文字的倒影效果
- Android自定义TextView闪烁文字的效果
- Android Textview实现文字颜色渐变效果
- 走马灯效果文字TextView
- TextView 文字淡入效果
- TextView文字阴影效果。
- android 把TextView中的文字添加阴影效果
- android 改变TextView和EditText文字选中效果
- android 改变TextView和EditText文字选中效果
- 【Nutch】InjectorJob
- HDU 1013 Digital Roots 大数 水题
- 4565: [Haoi2016]字符合并
- Android和Unity混合开发——Activity和Unity脚本交互和信息传递
- Yii2 之 富文本编辑器
- Android最实用TextView文字逐个打出效果
- Python Email
- WPF的ComboBox实现可过滤显示下拉内容
- javaapplet还有用吗
- angular js ng-route 路由简单实例
- 剑指offer——面试题26:复杂链表的复制
- 第14周 oj 4 求3×3矩阵对角线元素之和
- VS2008下解决release版的工程在使用CSocket 调用create函数时出错的bug
- Educational Codeforces Round 15 D Road to Post Office(分类讨论)