在我的APP中我使用https://github.com/semanticer/TurriType - 它用于“类型编写者”文本动画。
它有效(大部分时间,可能会更好....),但我的AnimatorListener不起作用(因此onAnimationStart / onAnimationEnd也不起作用)。
在我的活动(不是MainActivity)中,我有这个:
Animator.AnimatorListener toastListener = new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_LONG).show();
}
@Override
public void onAnimationEnd(Animator animation) {
Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_LONG).show();
mCardViewChoice1.setVisibility(View.VISIBLE);
mCardViewChoice2.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationCancel(Animator animation) {
Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_LONG).show();
}
@Override
public void onAnimationRepeat(Animator animation) {
Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_LONG).show();
}
};
animator = TurriType.write(pageText).withListener(toastListener).into(mTextView);
mTextView.setText("");
animator.start();
动画效果很好,但我没有收到Toasts,所以我无法使用它。
有什么想法吗?谢谢:)
答案 0 :(得分:1)
根据您提供的来源,这似乎是预期的行为。
这是你的电话
animator = TurriType.write(pageText).withListener(toastListener).into(mTextView);
如果你看TypeAnimationFactory的第44行,你会看到它没有添加提供的animationListener,如果已经有插值器的话。
最后,如果你查看TurriType.write(...)
(第56行here)方法,你会看到它使用LinearInterpolator创建一个默认的“WriteRequest”对象。
因此,动画将会起作用,但由于您的侦听器从未设置过,因此您无法获得回调。