Показать текстовое представление шаг за шагом после некоторой продолжительности

Я хочу отображать кнопку или текстовое представление шаг за шагом через несколько секунд после того, как пользователь нажмет кнопку с tts. Например:

A -----> AB -----> ABC ---> Изображение.. a -----> ab -----> abc ---> Изображение..

у всех разный вид текста означает 4 вид текста

У меня есть невидимые все элементы, которые нужно показать и установить видимыми во время настройки, но это не работает, как ожидалось, и даже не думаю, что это правильное решение.

public void playRow1(View v) {
    mytexts = (Button)findViewById(R.id.btn3Img);

        handler.postDelayed(new Runnable(){
            @Override
            public void run() {
                for(int i=0; i < 3; i++){
                    if(i == 0){
                        Button btn1 = (Button) findViewById(R.id.btn3Img);
                        Button btn2 = (Button) findViewById(R.id.btn3Img2);
                        Button btn3 = (Button) findViewById(R.id.Button01);


                        ImageView btnImg1 = (ImageView) findViewById(R.id.imgObjRow1);
                        ImageView btnImg2 = (ImageView) findViewById(R.id.imgPlayNextRow1);

                        btn1.setVisibility(View.VISIBLE);
                        btn2.setVisibility(View.VISIBLE);
                        btnImg1.setVisibility(View.VISIBLE);
                        btn3.setVisibility(View.VISIBLE);

                        tts.speak("a ", TextToSpeech.QUEUE_FLUSH, null);
                        btnImg2.setVisibility(View.INVISIBLE);
                        try{
                        Thread.sleep(3000);
                        }catch(Exception e){

                        }

            }
        }, 2000 * (count + 1));
    }

Я считаю, что метод запуска должен быть в цикле, но это не работает.... Пожалуйста, помогите мне предоставить какое-то решение для отображения текста по шагам.

заранее спасибо. это внутри

1 ответ

Решение

Я только что протестировал (один TextView) решение, которое работает просто отлично.
Это выглядит так:

    TextView txt = (TextView) findViewById(R.id.txtTitle);
    final String str = "Some Text";

    final int secs = str.length();
    new CountDownTimer((secs + 1) * 1000, 1000) // Tick length: 1 second
    {
        int sec = 0;

        @Override
        public final void onTick(final long millisUntilFinished)
        {
            txt.setText(txt.getText().toString() + str.charAt(sec));
            sec += 1;
        }
        @Override
        public void onFinish()
        {
            // TODO Auto-generated method stub
        }
    }.start();

Этот код идет после вашего setContentView (в вашем методе onCreate()) и предполагает, что ваш макет имеет TextView с именем txtTitle,

Точно так же вы можете сделать с любым другим TextView.

[ОБНОВИТЬ]

Это как сделать то же самое, но с 2 TextViews. Второй начинает "печатать" после того, как первый закончил:

    final TextView txt = (TextView) findViewById(R.id.txtTitle);
    final TextView txt2 = (TextView) findViewById(R.id.txtTitle2);

    final String str = "Some Text";
    final String str2 = "Another Text";

    //init();

    final int secs = str.length();
    new CountDownTimer((secs + 1) * 1000, 1000)
    {
        int sec = 0;

        @Override
        public final void onTick(final long millisUntilFinished)
        {
            txt.setText(txt.getText().toString() + str.charAt(sec));
            sec += 1;
        }
        @Override
        public void onFinish()
        {
            final int secs = str2.length();
            // Start the second CountDownTimer
            new CountDownTimer((secs + 1) * 1000, 1000)
            {
                int sec = 0;

                @Override
                public final void onTick(final long millisUntilFinished)
                {
                    txt2.setText(txt2.getText().toString() + str2.charAt(sec));
                    sec += 1;
                }
                @Override
                public void onFinish()
                {
                    // TODO Auto-generated method stub
                }
            }.start();
        }
    }.start();

Вы можете легко расширить концепцию до любого количества TextViews, просто запустите следующий CountDownTimer в onFinish() метод предыдущего.

Другие вопросы по тегам