0

我正在使用 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);
}

这两个方法在初始化期间被调用。

4

0 回答 0