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

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

Я снова попытался использовать 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. Есть ли способ взломать это?

1 ответ

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

 lbl.animate();
 lbl.animate().x(-lblWidth).y(0);
 lbl.animate().setDuration(animDuration);
 lbl.animate().setInterpolator(new LinearInterpolator());
 lbl.animate().setRepeatCount(Animation.INFINITE);
Другие вопросы по тегам