Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Ringov
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 4
#1

Анимация печатания текста в TextView - Программирование Android

07.03.2015, 13:58. Просмотров 802. Ответов 5
Метки нет (Все метки)

Приветствую всех.

Сразу покажу, чего хочу добиться (черные косяки вокруг букв в планы не входят ).
Кликните здесь для просмотра всего текста
Анимация печатания текста в TextView


Есть String, есть textView (но не обязательно именно он). Нужно программно "напечатать" в течение времени String в textView. В идеале хотелось бы иметь возможность изменять интервалы между символами (каждый следующий выводить с рандомной задержкой, чтобы больше походило на человеческий набор).

Пробовал разные варианты, но ни один не подошел, а своих знаний не хватает на реализацию чего-то подобного.
Лучше всего справляется Timer, но я так и не придумал, как реализовать рандомные интервалы (подозреваю что таймер по своей сути на такое не способен).
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2015, 13:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Анимация печатания текста в TextView (Программирование Android):

Анимация textview - Программирование Android
Нашёл на форуме код, но что то пошло не так :) Анимация текста. Как будто кто то печатает текст. Может посмотрите что не так? ...

Анимация счетчика (TextView) от 0 до 1000? - Программирование Android
Здравствуйте, всем. Подскажите, пожалуйста, как сделать анимацию значения счетчика от 0 до 1000, например, за 1 секунду? Возможно я...

Выделение текста в TextView - Программирование Android
При выделении текста в TextView android:textIsSelectable="true" на моем устройстве(HTC ONE X Android 4.2.2) появляется всплывающее меню,...

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

TextView авторазмер текста - Программирование Android
android studio Textview имеет размеры 100% на 50%, заполняя половину экрана. В нем написано число, которое изменяется по нажатию на...

TextView выравнивание текста - Программирование Android
В текст в TextView по умолчанию идет выравнивание текста по левому краю. Как выровнять текст по всей ширине, как если бы в Word вы нажали...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,432
Записей в блоге: 2
07.03.2015, 15:44 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ringov, наверн как-то так


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class DelayedPrinter {
 
    public static void printText(final Word word, final TextView textView) {
        Random random = new Random(System.currentTimeMillis());
 
        int currentRandOffset = random.nextInt(word.offset);
        boolean addOrSubtract = random.nextBoolean();
        long finalDelay = addOrSubtract ? word.delayBetweenSymbols + currentRandOffset : word.delayBetweenSymbols - currentRandOffset;
        if (finalDelay < 0) finalDelay = 0;
 
        textView.postDelayed(new Runnable() {
            @Override
            public void run() {
                String charAt = String.valueOf(word.word.charAt(word.currentCharacterIndex));
                ++word.currentCharacterIndex;
                textView.setText(textView.getText() + charAt);
                if (word.currentCharacterIndex >= word.word.length()) return;
                printText(word, textView);
            }
        }, finalDelay);
    }
 
 
    public static class Word {
 
        private long delayBetweenSymbols;
        private String word;
        private int offset;
        private int currentCharacterIndex;
 
        public Word(long delayBetweenSymbols, String word) {
            if (delayBetweenSymbols < 0) throw new IllegalArgumentException("Delay can't be < 0");
            this.delayBetweenSymbols = delayBetweenSymbols;
            this.word = word;
        }
 
        public void setOffset(int offset) {
            this.offset = offset;
        }
    }
 
}
и вот вызов

Java
1
2
3
DelayedPrinter.Word word = new DelayedPrinter.Word(100, "Hello, word");
        word.setOffset(50);
        DelayedPrinter.printText(word, textView);
Делал на коленке, не проверял. Так что проверьте сами
Ringov
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 4
07.03.2015, 17:46  [ТС] #3
YuraAAA, код заработал сразу и как нужно, остается только снять шляпу и сказать спасибо!

Результат выше всяких похвал:
Кликните здесь для просмотра всего текста
Анимация печатания текста в TextView
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,432
Записей в блоге: 2
07.03.2015, 17:51 #4
Ringov, о, прикольно, мне нравится запись в блог, Вам - не за что, обращайтесь =)
Ringov
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 4
07.03.2015, 18:00  [ТС] #5
YuraAAA, только Ваш метод при повторном вызове вываливался с ошибкой, я позволил себе кое-что добавить, а раз Вы публикуете это в блог, думаю тоже стоит поправить

Обнуление currentCharacterIndex, когда доберемся до конца строки:
Java
1
2
3
if (word.currentCharacterIndex >= word.word.length()){
word.currentCharacterIndex = 0;
return;}
И в начале метода очистка textView (ну это конечно по желанию):
Java
1
if(word.currentCharacterIndex == 0) textView.setText("");
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,432
Записей в блоге: 2
07.03.2015, 18:05 #6
Ringov, а, ну да, точно. Всё правильно =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2015, 18:05
Привет! Вот еще темы с ответами:

Отображение текста (из файла) в textView - Программирование Android
В общем не могу разобраться как сделать так что бы при нажатии на кнопку (Button) в компоненте textView отображался текст, который будет...

Вставка текста из файла в TextView - Программирование Android
Доброй ночи. Вопрос возможно банален, но сейчас 2 ночи,а ответ так и не удалось найти. Собственно вопрос: Необходимо загрузить...

Динамическое изменение текста в TextView - Программирование Android
Есть TextView в RelativeLayout, которое вмещает в себя надпись &quot;Привет мир&quot;, а вот надпись &quot;Привет весь мир&quot; уже не влезает. Есть ли...

Выравнивание текста в TextView по ширине - Программирование Android
Доброго времени суток! Подскажите пожалуйста, как можно выровнять текст по ширине (распределить текст равномерно между левым и правым...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.03.2015, 18:05
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru