Как сделать кликабельное и анимированное текстовое представление? - PullRequest
0 голосов
/ 10 сентября 2018

Мне нужно реализовать текстовое представление с перемещением / прокруткой, которое получило кликабельный промежуток. Мне также нужно, чтобы анимация выглядела как рекламные баннеры под новостями, которые повторяются и повторяются бесконечно. Я использовал 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 прослушивателя animate. Теперь я подумал о другом, могу ли я приостановить эту анимацию? Потому что я нашел способ сделать это для TranslateAnimation. Есть ли способ сделать это взломать?

1 Ответ

0 голосов
/ 10 сентября 2018

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

 lbl.animate();
 lbl.animate().x(-lblWidth).y(0);
 lbl.animate().setDuration(animDuration);
 lbl.animate().setInterpolator(new LinearInterpolator());
 lbl.animate().setRepeatCount(Animation.INFINITE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...