Добрый день всем
Итак, я пытаюсь динамически изменять свойства textview.в основном я определил продолжительность.и я хочу, чтобы мой обработчик / runnable мог добавлять текст в 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
}
});
}
}
Так что да, он добавляет текст один раз, потому что запуск делает это.Но как я мог сделать какой-то цикл, не блокируя поток пользовательского интерфейса, и добавлять текст до конца продолжительности.
Это был первый шаг ...
Вторая часть теперь... На самом деле, я хочу изменить цвет текста.используя
Spannable WordtoSpan = new SpannableString(view.getText());
WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 0, view.getText().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Я хочу, чтобы изменение цвета было динамичным в течение продолжительности ... как караоке ... Итак, возможно ли сделать это в рабочем режиме без блокировки потока пользовательского интерфейса до тех пор, покаконец продолжительности?и как?
Если кто-нибудь может объяснить завершенный процесс?или отправьте какой-нибудь исходный код
Решено.Вот базовый пример ... Все еще есть небольшая проблема ... В самом начале приложения весь текстовый вид отображается желтым цветом, а через секунду он обновляет отображение так, как должно быть.Если кто-то знает почему, советы приветствуются =)
Примечание: в макете есть только два простых 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);
}
}