大家下午好
因此,我正在尝试动态更改 textview 的属性。 基本上,我定义了一个持续时间。我希望我的处理程序/可运行程序将文本附加到 textView,直到达到持续时间。
public class Dynamic_testActivity extends Activity
{
public Context context = null;
public TextView view = null;
public Handler mHandler = null;
public long startTime = 0L;
public final int duration_millis = 10000;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = getApplicationContext();
view = (TextView) findViewById(R.id.textView1);
view.append("\n");
mHandler = new Handler();
}
@Override
protected void onStart() {
super.onStart();
startTime = System.currentTimeMillis();
mHandler.post(new Runnable() {
@Override
public void run() {
view.append("Hell_yeah_!\n");
// 10 character lenght
}
});
}
}
所以是的,它附加了一次文本,因为运行是这样做的。 但是我怎样才能在不阻塞 UI 线程的情况下进行某种循环,并在持续时间结束之前附加文本。
这是第一步...
现在是第二部分……事实上,我想改变文本的颜色。 使用
Spannable WordtoSpan = new SpannableString(view.getText());
WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 0, view.getText().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
我希望颜色在持续时间内保持动态变化……就像卡拉 OK 一样…… 那么,是否可以在不阻塞 UI 线程直到持续时间结束的情况下使其成为可运行的?以及如何?
如果有人能解释一下完整的过程?或者发布一些源代码
已解决。 这是一个基本的例子...... 还是有点麻烦。。。在应用程序的最开始,整个textview都是黄色的,一秒钟后,它更新了应该显示的内容。 如果有人知道为什么,欢迎提出建议 =)
注意:布局中只有两个简单的 Textview……持续时间以毫秒为单位……动态 TextView 中有 10 个字符来适应持续时间……所以基本上,一个字符 = 一秒……
public class Dynamic_testActivity extends Activity
{
public Context context = null;
public TextView view = null;
public TextView view2 = null;
public Handler handler = null;
public long start_time, current_time, elapsed_time = 0L;
public final int duration = 10000;
public int end = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = getApplicationContext();
view = (TextView) findViewById(R.id.textView1);
view2 = (TextView) findViewById(R.id.textView2);
handler = new Handler();
}
@Override
protected void onStart() {
super.onStart();
start_time = Long.valueOf( System.currentTimeMillis() );
current_time = start_time;
handler.postDelayed(new Runnable() {
@Override
public void run() {
current_time = Long.valueOf( System.currentTimeMillis() );
elapsed_time = Long.valueOf(current_time) - Long.valueOf(start_time);
if ( elapsed_time >= duration + 30 ) {
Toast.makeText(context, "Done", Toast.LENGTH_LONG).show();
//finish();
} else {
end = (int) (elapsed_time / 1000);
Spannable WordtoSpan = new SpannableString(view.getText());
WordtoSpan.setSpan(new ForegroundColorSpan(Color.YELLOW), 0, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
view.setText(WordtoSpan);
view2.setText("time : " + elapsed_time);
handler.postDelayed(this, 10);
}
}
}, 10);
}
}
最佳答案
在你的 run() 方法中,你可以调用 mHandler.post(this) (或者使用 postDelayed 来延迟它)
API 级别 14 中有属性更改动画,但如果您的目标是较低版本,请重复使用 postDelayed 以逐步更改文本的颜色。
关于android - 一般如何动态更改 TextVIew 和 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8388341/