Показать текстовое представление шаг за шагом после некоторой продолжительности
Я хочу отображать кнопку или текстовое представление шаг за шагом через несколько секунд после того, как пользователь нажмет кнопку с 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()
метод предыдущего.