Я строю приложение для отображения текста, которое требует горизонтального текста прокрутки с управляемой скоростью. Я потратил время на то, чтобы пробовать разные подходы, но у меня были проблемы с обоими. Marquee < /p>
Это работает отлично, за исключением того, что я не могу контролировать скорость: < /p>
private void setupScrollingText(TextView textView) {
textView.setSingleLine(true);
textView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
textView.setMarqueeRepeatLimit(-1);
textView.setSelected(true);
textView.setHorizontallyScrolling(true);
textView.post(() -> {
int availableHeight = textView.getHeight() -
textView.getPaddingTop() - textView.getPaddingBottom();
float optimalSize = availableHeight * 0.8f;
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, optimalSize);
});
}
< /code>
Я попробовал: < /p>
Чтобы изменить mmarquee.mpixelspersecond /mscrollunit < /li>
Модификация Duration < /li>
< /ul>
Подход 2: объект. ObjectAnimator вырезает текст, который прокручивается последней буквой в отрезанном тексте, часто отображается только частично: < /p>
private void setupScrollingText(TextView textView) {
textView.setSingleLine(true);
textView.post(() -> {
textView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
float textWidth = textView.getMeasuredWidth();
int containerWidth = root.getWidth() - root.getPaddingLeft() - root.getPaddingRight();
if (textWidth > containerWidth) {
long duration = calculateDurationFromSpeed(textWidth, scrollSpeed);
ObjectAnimator animator = ObjectAnimator.ofFloat(textView, "translationX",
containerWidth, -textWidth);
animator.setDuration(duration);
animator.setRepeatCount(ObjectAnimator.INFINITE);
animator.setInterpolator(new LinearInterpolator());
animator.start();
}
});
}
< /code>
Отрезание текста происходит независимо от параметров макета match_parent, wrap_content. < /p>
xml: < /p>
< /code>
Как я могу контролировать нативную скорость шатра? Существует ли рабочий метод для Android API 21+, который фактически меняет скорость прокрутки? В чем проблема, которая вызывает отрезанные буквы в свитке? < /Li>
Альтернативные подходы? Если два, которые я пытался реализовать, невозможно < /li>
< /ul>
Подход нативного шатра работает для дисплея, но не имеет управления скоростью. Подход ObjectAnimator дает управление скоростью, но разбивает текст, не отображает полный текст.
Подробнее здесь: https://stackoverflow.com/questions/796 ... alternativ
Android TextView Marquee: Как управлять скоростью прокрутки? Альтернативная резка текста объекта ⇐ Android
Форум для тех, кто программирует под Android
1749060311
Anonymous
Я строю приложение для отображения текста, которое требует горизонтального текста прокрутки с управляемой скоростью. Я потратил время на то, чтобы пробовать разные подходы, но у меня были проблемы с обоими. Marquee < /p>
Это работает отлично, за исключением того, что я не могу контролировать скорость: < /p>
private void setupScrollingText(TextView textView) {
textView.setSingleLine(true);
textView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
textView.setMarqueeRepeatLimit(-1);
textView.setSelected(true);
textView.setHorizontallyScrolling(true);
textView.post(() -> {
int availableHeight = textView.getHeight() -
textView.getPaddingTop() - textView.getPaddingBottom();
float optimalSize = availableHeight * 0.8f;
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, optimalSize);
});
}
< /code>
Я попробовал: < /p>
Чтобы изменить mmarquee.mpixelspersecond /mscrollunit < /li>
Модификация Duration < /li>
< /ul>
Подход 2: объект. ObjectAnimator вырезает текст, который прокручивается последней буквой в отрезанном тексте, часто отображается только частично: < /p>
private void setupScrollingText(TextView textView) {
textView.setSingleLine(true);
textView.post(() -> {
textView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
float textWidth = textView.getMeasuredWidth();
int containerWidth = root.getWidth() - root.getPaddingLeft() - root.getPaddingRight();
if (textWidth > containerWidth) {
long duration = calculateDurationFromSpeed(textWidth, scrollSpeed);
ObjectAnimator animator = ObjectAnimator.ofFloat(textView, "translationX",
containerWidth, -textWidth);
animator.setDuration(duration);
animator.setRepeatCount(ObjectAnimator.INFINITE);
animator.setInterpolator(new LinearInterpolator());
animator.start();
}
});
}
< /code>
Отрезание текста происходит независимо от параметров макета match_parent, wrap_content. < /p>
xml: < /p>
< /code>
Как я могу контролировать нативную скорость шатра? Существует ли рабочий метод для Android API 21+, который фактически меняет скорость прокрутки? В чем проблема, которая вызывает отрезанные буквы в свитке? < /Li>
Альтернативные подходы? Если два, которые я пытался реализовать, невозможно < /li>
< /ul>
Подход нативного шатра работает для дисплея, но не имеет управления скоростью. Подход ObjectAnimator дает управление скоростью, но разбивает текст, не отображает полный текст.
Подробнее здесь: [url]https://stackoverflow.com/questions/79653263/android-textview-marquee-how-to-control-scroll-speed-objectanimator-alternativ[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия