Как сделать динамическое изменение TextVIew и UI в целом? - PullRequest
1 голос
/ 05 декабря 2011

Добрый день всем

Итак, я пытаюсь динамически изменять свойства 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);
    }
}

1 Ответ

1 голос
/ 05 декабря 2011

В своем метоне run () вы можете вызвать mHandler.post (this) (или использовать postDelayed для его задержки)

Существует анимация изменения свойств на уровне API 14, но если вы нацелены на более низкую версию, используйте postDelayed многократно для постепенного изменения цвета текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...