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