我有这段代码:
public void setText(String s){
TextView tv= (TextView)HomeActivity.tf.getView().findViewById(R.id.textViewFragment);
char c;
for(int i=0; i< s.length(); i++){
c= s.charAt(i);
tv.append(String.valueOf(c));
try{
Thread.sleep(100);
}catch(Exception e){}
}
}
问题是我无法让TextView逐个显示字母。完成循环并执行所有操作后,即文本显示时。
我希望让它逐个字母显示,以便为TextView提供动画效果。
答案 0 :(得分:5)
此代码有效,
public void setText(final String s)
{
TextView tv= (TextView)HomeActivity.tf.getView().findViewById(R.id.textViewFragment);
final int[] i = new int[1];
i[0] = 0;
final int length = s.length();
final Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
char c= s.charAt(i[0]);
Log.d("Strange",""+c);
tv.append(String.valueOf(c));
i[0]++;
}
};
final Timer timer = new Timer();
TimerTask taskEverySplitSecond = new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(0);
if (i[0] == length - 1) {
timer.cancel();
}
}
};
timer.schedule(taskEverySplitSecond, 1, 500);
}
答案 1 :(得分:0)
如果某人仍在寻找更好的解决方案(使用动画字母),请试用Fade-In TextView。
此TextView库直接从本机TextView类继承其属性,这意味着支持所有本机TextView方法。实际上没有任何限制,包括多线支持。它还有一些自己的方法和属性,可以完全控制View。
答案 2 :(得分:0)
更简单
Thread thread = new Thread() {
int i;
@Override
public void run() {
try {
for (i = 0; i < text.length(); i++) { // use your variable text.leght()
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(text.substring(0, i));
}
});
}
} catch (InterruptedException e) {
}
}
};
thread.start();