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

Нарисовать на канвасе цветной текст - Android

Восстановить пароль Регистрация
 
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
14.01.2016, 16:34     Нарисовать на канвасе цветной текст #1
Подскажите, может кто сталкивался...

Решил начать писать свою реалицию компонента из Анимировать текст горизонтальной прокруткой

Не по теме:

процесс долгий, но начинать надо - уже второй компонент перестал "вмещаться" в 2 строки и создавая 3ю портит все активити



Раньше использовал подобное:
Java
1
2
String str1="<big>образец</big> <FONT COLOR=#00FFFF>текста</FONT>";
((TextView) findViewById(R.id.tv_1)).setText(Html.fromHtml(str1));
Получал корректные переносы на другую строку если не вмещалось. Теперь должен сам обработать "текст не вмещается".

Надо этот-же цветной/увеличенный/наклонный текст командами нарисовать... Такое реально? (есть готовые команды у канваса) Или надо свой "парсер" писать и поблочно цветами выводить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2016, 16:34     Нарисовать на канвасе цветной текст
Посмотрите здесь:

Android Нарисовать график на виджете
Нарисовать линию Android
Android Как нарисовать текст в прямоугольнике с переносом слов по ширине и отрезанием текста по высоте?
Android Цветной текст в textview
Получать текст входящих sms-сообщений от определённого номера и использовать этот текст в своей программе Android
Нарисовать на карте Android
Android Нарисовать линию градиентом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
14.01.2016, 16:47     Нарисовать на канвасе цветной текст #2
Цитата Сообщение от Tester64 Посмотреть сообщение
надо свой "парсер" писать и поблочно цветами выводить?
Только так. А может просто унаследовать TextView и двигать канвас в onDraw, после super.onDraw()?.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
14.01.2016, 16:55  [ТС]     Нарисовать на канвасе цветной текст #3
Цитата Сообщение от Spelcrawler Посмотреть сообщение
А может просто унаследовать TextView и двигать канвас в onDraw, после super.onDraw()?
Не, мне надо и зумировать и двигать...
Задумка грандиозная - если не вмещается на 2-3 символа - сжимаем, иначе дорисовываем маркер-слайдера для того чтобы юзер догадался что видет не все... Причем чуть-ли не сам будет решать куда двигаться будет - вниз или вбок...

Цитата Сообщение от Spelcrawler Посмотреть сообщение
Только так.
Уверены? на все 100%? Может этот парсер уже где-то лежит? Или можно получить хотя-бы текст по блокам?
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
14.01.2016, 17:01     Нарисовать на канвасе цветной текст #4
Tester64, Ну и сжимать канвас можно без проблем.
Цитата Сообщение от Tester64 Посмотреть сообщение
Причем чуть-ли не сам будет решать куда двигаться будет - вниз или вбок...
Да тоже без проблем тем же способом можно.
Цитата Сообщение от Tester64 Посмотреть сообщение
дорисовываем маркер-слайдера
На готовом канвасе (когда уже текст отрисовался) можно и дорисовать все что угодно.
Цитата Сообщение от Tester64 Посмотреть сообщение
Уверены? на все 100%?
На 99%)
Да таким способом будет сложнее анимировать, зуммировать и т.д. текст, но зато куча методов от TextView будет работать. Осталось только придумать как узнать размеры текста (те что должны быть, если вьюшка бесконечного размера), даже не знаю можно ли.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
14.01.2016, 18:00  [ТС]     Нарисовать на канвасе цветной текст #5
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Ну и сжимать канвас можно без проблем.
Это все не то! шрифты на 99% "поплывут", станут мутными и не правильно растянутся...
Надо рисовать "с нуля". Желательно с "кешированием" и перерисовкой "по слоям" (адская сложность)
...пожалуй "с нуля" надо начинать! Нашел на гитхабе десяток-два компонент с модификацией TextView - сначала попробую запустить и изучу... (https://github.com/search?utf8=%E2%9...droid+textview)
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
14.01.2016, 18:01     Нарисовать на канвасе цветной текст #6
Цитата Сообщение от Tester64 Посмотреть сообщение
Это все не то! шрифты на 99% "поплывут", станут мутными и не правильно растянутся...
И правда, что-то забыл про это все. Тогда нужно смотреть исходники TextView - там то точно есть парсер html.
Паблито
не спать!
1870 / 1604 / 493
Регистрация: 12.05.2014
Сообщений: 5,806
Завершенные тесты: 1
14.01.2016, 19:41     Нарисовать на канвасе цветной текст #7
не знаю поможет ли, я немного потренировался и сделал прокрутку текста туда-сюда
кусок из xml, вставляете для теста куда угодно, например в main_activity.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
    <HorizontalScrollView
        android:id="@+id/scrollView"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:scrollbars="none">
 
        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
 
    </HorizontalScrollView>
немного кода, без оптимизаций, что бы было ясно что просиходит
вставляем в onCreate()
Кликните здесь для просмотра всего текста
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
        final HorizontalScrollView scrollView = (HorizontalScrollView) findViewById(R.id.scrollView);
        final TextView tv = (TextView) findViewById(R.id.tv);
        //
        SpannableString str1 = new SpannableString("Красный ");
        str1.setSpan(new ForegroundColorSpan(Color.RED), 0, str1.length(), 0);
        //
        SpannableString str2 = new SpannableString("Большой ");
        str2.setSpan(new RelativeSizeSpan(2), 0, str2.length(), 0);
        //
        SpannableString str3 = new SpannableString("жирный ");
        str2.setSpan(new StyleSpan(Typeface.BOLD), 0, str3.length(), 0);
        //
        SpannableString str4 = new SpannableString("текст");
        //
        SpannableStringBuilder ssb = new SpannableStringBuilder();
        ssb.append(str1).append(str2).append(str3).append(str4);
        tv.setText(ssb);
 
        // делаем так потому что в onCreate() еще не посчитаны размеры вьюшек
        scrollView.post(new Runnable() {
            @Override
            public void run() {
                ObjectAnimator a = ObjectAnimator.ofInt(scrollView, "scrollX", 0, tv.getWidth() - scrollView.getWidth());
                a.setRepeatMode(ValueAnimator.REVERSE);
                a.setRepeatCount(ValueAnimator.INFINITE);
                a.setDuration(2000);
                a.start();
            }
        });

кода на первый взгяд многовато, но если присмотреться - там бОльшая часть это понты для стилизации текста (стилизовать его через html - это бдсм)

Добавлено через 6 минут
нашел опечатку, не критичную
Java
1
str3.setSpan(new StyleSpan(Typeface.BOLD), 0, str3.length(), 0);
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
14.01.2016, 20:02  [ТС]     Нарисовать на канвасе цветной текст #8
Цитата Сообщение от Паблито Посмотреть сообщение
я немного потренировался и сделал прокрутку текста туда-сюда
спасибо! попробую... (мне надо это воткнуть во "флайку", активити и диалог, а там не все компоненты одинаково работают - кажется уже (давно) пробовал и не удачно)

Цитата Сообщение от Паблито Посмотреть сообщение
стилизовать его через html - это бдсм
Шутишь? Зацени:

Java
1
2
3
4
5
6
String str1="";
str1+="<FONT COLOR=#FF0000>Красный </FONT>";
str1+="<big><big>Очень большой </big></big>";
str1+="<b>жирный </b>";
str1+="текст";
((TextView) findViewById(R.id.tv_1)).setText(Html.fromHtml(str1));
Или даже
Java
1
2
String str1="<FONT COLOR=#FF0000>Красный</FONT> <big><big>Очень большой</big></big> <b>жирный</b> текст";
((TextView) findViewById(R.id.tv_1)).setText(Html.fromHtml(str1));
Компактнее?

Добавлено через 9 минут
Цитата Сообщение от Паблито Посмотреть сообщение
я немного потренировался и сделал прокрутку текста туда-сюда
Спасибо! Сработало... для начала хватит... только я "свой" скролвьюв поставил, вертикальный и сейчас попробую туда обязательный скролбар прикрутить (а то не понятно нужно ли листать вниз или весь текст и так поместился)
Паблито
14.01.2016, 20:08
  #9

Не по теме:

так а что там "крутить" - меняем HorizolnalScrollView в разметке на ScrollView и ставим android:scrollbars="vertical"
и одна строчка в аниматоре меняется на scrollY и getHeight()

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2016, 20:12     Нарисовать на канвасе цветной текст
Еще ссылки по теме:

Android OnTouchEvent - нарисовать точку
Android нарисовать многоугольник
Android Spannable - цветной текст
Нарисовать текст drawTextOnPath горизонтально Android
Android Как можно нарисовать многоугольник

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

Или воспользуйтесь поиском по форуму:
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
14.01.2016, 20:12  [ТС]     Нарисовать на канвасе цветной текст #10
Цитата Сообщение от Паблито Посмотреть сообщение
так а что там "крутить"
У меня написан свой скролвьювер! С несколькими... доработками...например ограничение на длину "перекрутки" за пределы экрана. До этого мои 2 строки мог целиком скрыть, а теперь лишь на 3-4 мм от бортика отрываю... + некоторые доработки по скролбару... И заготовка для автоматического плавного листания...
Yandex
Объявления
14.01.2016, 20:12     Нарисовать на канвасе цветной текст
Ответ Создать тему
Опции темы

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