原理 :
根据TextView内种进行填充加载 每个字之字符相隔一定时间显示出来
关键技术 hander处理
public class SinglyTextView extends TextView {
private String mOriginalStr;//------用于保存原始字符串
private long mDuration = 200;//---默认显示每个字符的时间间隔
private int mIndex = 0;//-----记录将要显示的字符的位置
private Handler mHandler;
private final int SHOW_NEXT_CHAR = 1;
public SinglyTextView(Context context) {
super(context);
init();
start();
}
public SinglyTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
start();
}
public SinglyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
start();
}
private void init() {
mOriginalStr = getText().toString();//---保存字符串
this.setText("");//-----先清空
mHandler = new Handler() {
@SuppressLint("HandlerLeak")
public void handleMessage(Message msg) {
if (msg.what == SHOW_NEXT_CHAR && mIndex < mOriginalStr.length()) {
SinglyTextView.this.setText(SinglyTextView.this.getText().toString()
+ mOriginalStr.charAt(mIndex));
mIndex++;
}else if ( mOriginalStr.length()<=mIndex){//循环加载用于轮播处理
mIndex = 0;
SinglyTextView.this.setText("");
mHandler.sendEmptyMessage(SHOW_NEXT_CHAR);
}
}
};
}
public void setDuration(long duration) {
mDuration = duration;
}
private void start() {
new Thread() {
public void run() {
while (true) {
try {
Thread.sleep(mDuration);
mHandler.sendEmptyMessage(SHOW_NEXT_CHAR);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}.start();
}
}