Как сделать текстовое представление интерактивным и анимированным?

Мне нужно реализовать движущееся / прокручивающееся текстовое представление, которое имеет интерактивный диапазон. Мне также нужно сделать анимацию похожей на рекламные баннеры под новостями, которые повторяются и повторяются бесконечно. Раньше я использовал TranslateAnimation для телевизионного приложения и смог заставить его работать, потому что я получаю keyEvent и touch. Мне нужно реализовать это сейчас в приложении для планшета, у которого нет внешнего источника ввода, кроме самого сенсорного экрана.

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

Затем я наткнулся на PropertyAnimator. Это то, что мне явно нужно для решения моей проблемы. Но у этого есть и недостаток. Он не поддерживает повторение.

В настоящее время у меня есть этот код ниже.

        lbl.animate();
        lbl.animate().x(-lblWidth).y(0);
        lbl.animate().setDuration(animDuration);
        lbl.animate().setInterpolator(new LinearInterpolator());
        lbl.animate().setListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                lbl.animate();
                lbl.animate().x(lblWidth).y(0);
                lbl.animate().setDuration(0);
                lbl.animate().x(-lblWidth).y(0);
                lbl.animate().setDuration(animDuration);
                lbl.animate().setInterpolator(new LinearInterpolator());
                lbl.animate().setListener(this);
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });

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

Я пытался создать повторяющийся эффект с помощью этого кода. Я пытался воссоздать что-то вроде этого кода ниже.

            transAnim = new TranslateAnimation(
                    TranslateAnimation.RELATIVE_TO_PARENT, 1.0f,
                    TranslateAnimation.RELATIVE_TO_SELF, -1.0f,
                    TranslateAnimation.ABSOLUTE, 0f,
                    TranslateAnimation.ABSOLUTE, 0f
            );

            transAnim.setRepeatCount(-1);
            transAnim.setRepeatMode(Animation.RESTART);
            transAnim.setInterpolator(new LinearInterpolator());
            transAnim.setDuration(animDuration);
            transAnim.setFillAfter(true);

Приведенный выше код делает следующее: справа, за пределами экрана, я запускаю анимацию, которая идет влево, за пределы экрана. Затем, если конец представления достигает левого края экрана, скажите, что анимация перезапустится с начала.

Я заставил это работать, добавив одну короткую строку кода поверх всего.

    lbl.setX(screenWidth);
    lbl.animate().x(-lblWidth).y(0);
    lbl.animate().setDuration(animDuration);
    lbl.animate().setInterpolator(new LinearInterpolator());

Затем снова используйте эту строку кода в onAnimationEnd прослушивателя анимации. Теперь я подумал о другом, можно ли приостановить эту анимацию? Потому что я нашел способ сделать это для TranslateAnimation. Есть ли способ сделать это взломом?

На вашем onAnimationEnd вы используете два setDuration. Это необходимо?

Tepits 10.09.2018 11:04

Попробуйте это Ссылка

Sniffer 10.09.2018 11:05

@Tepits tbh, я действительно не знаю, как им пользоваться. Я узнал об этом только сегодня.

BlueGreen 10.09.2018 11:12

@Sniffer Я использовал раньше, но я этого не делаю, если он поддерживает паузу, поэтому я не использовал его в моем текущем случае

BlueGreen 10.09.2018 11:15
0
4
151
1

Ответы 1

Попробуйте это, надеюсь, это сработает для вас.

 lbl.animate();
 lbl.animate().x(-lblWidth).y(0);
 lbl.animate().setDuration(animDuration);
 lbl.animate().setInterpolator(new LinearInterpolator());
 lbl.animate().setRepeatCount(Animation.INFINITE);

нет setRepeatCount для animate ()

BlueGreen 11.09.2018 03:48

Анимация анимация = новый TranslateAnimation (0, 500,0, 0); animation.setDuration (1000); animation.setFillAfter (правда); animation.setRepeatCount (Animation.INFINITE); view.startAnimation (анимация); Попробуй это.

Parveen 11.09.2018 04:52

Итак, он также использует TranslateAnimation. У вас есть решение, использующее ViewPropertyAnimation?

BlueGreen 12.09.2018 03:47

Другие вопросы по теме