У меня есть такой код:

public void setText(String s){
    TextView tv= (TextView)HomeActivity.tf.getView().findViewById(R.id.textViewFragment);


    char c;
    for(int i=0; i< s.length(); i++){
        c= s.charAt(i);

        tv.append(String.valueOf(c));

        try{
            Thread.sleep(100);
        }catch(Exception e){}
    }
}

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

Я хочу, чтобы он показать письмо по буквам, чтобы дать эффект анимации в текстовый просмотр.

6
Plasius 2 Янв 2016 в 22:12

3 ответа

Лучший ответ

Этот код работает,

    public void setText(final String s)
    {
    TextView tv= (TextView)HomeActivity.tf.getView().findViewById(R.id.textViewFragment);
    final int[] i = new int[1];
    i[0] = 0;
    final int length = s.length();
    final Handler handler = new Handler()
    {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            char c= s.charAt(i[0]);
            Log.d("Strange",""+c);
            tv.append(String.valueOf(c));
            i[0]++;
        }
    };

    final Timer timer = new Timer();
    TimerTask taskEverySplitSecond = new TimerTask() {
        @Override
        public void run() {
            handler.sendEmptyMessage(0);
            if (i[0] == length - 1) {
                timer.cancel();
            }
        }
    };
    timer.schedule(taskEverySplitSecond, 1, 500);
}
5
Parag Kadam 2 Янв 2016 в 21:42

Более простой

Thread thread = new Thread() {
    int i;

    @Override
    public void run() {
        try {
            for (i = 0; i < text.length(); i++) { // use your variable text.leght()
                Thread.sleep(1000);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        textView.setText(text.substring(0, i));
                    }
                });
            }
        } catch (InterruptedException e) {
        }
    }
};

thread.start();
0
glw 23 Мар 2019 в 22:56