我正在使用 a在收到TextSwitcher
某些文本时自动切换文本broadcasts
,并为此 TextSwitcher 添加滑入/滑出动画。但有时(如 30% 的时间)当TextSwitcher
从最后一个之前的 textView 切换到最后一个时,会发生闪烁。
从视觉上我看到的是State4
滑出,滑入State5
,当State5
没有完全滑入时,State4
又回来并滑出,然后滑入State5
。我检查了日志并打印了每个广播,它们以正确的顺序接收。在我看来,这是奇怪的 UI。
有谁知道为什么会这样?谢谢!!!
一些代码:
<TextSwitcher
android:id="@+id/ts1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
而我setFactory
用来设置TextView
.TextSwitcher
TextView textView = (TextView) textSwitcher.getCurrentView();
switch (state) {
case state1:
text = state1;
break;
case state2:
text = state2;
break;
case state3:
text = state3;
break;
case state4:
text = state4;
break;
case state5:
text = state5;
break;
default:
break;
}
if (!textView.getText().toString().equals(text))
textSwitcher.setText(text);
文本会按顺序从 1 切换到 5,5 为结束状态。不知道为什么有时 5 会闪烁回 4 然后再次闪烁到 5。我还检查了当前文本textSwitcher
是否与下一个相同,我们不这样做setText()
是不会执行动画的。
private void setFactoryForTextSwitcher(final TextSwitcher textSwitcher) {
textSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
public TextView makeView() {
TextView textView = new TextView(context);
textView.setSingleLine(true);
textView.setGravity(Gravity.CENTER_VERTICAL);
textView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.MATCH_PARENT));
return textView;
}
});
}
private void loadAnimationForTextSwitcher() {
final Animation slideInAnimation = AnimationUtils.loadAnimation(context, R.animator.slide_in);
final Animation slideOutAnimation = AnimationUtils.loadAnimation(context, R.animator.slide_out);
textSwitcher.setInAnimation(slideInAnimation);
textSwitcher.setOutAnimation(slideOutAnimation);
}
这两个方法在初始化期间被调用。