android 在文本视图中闪烁字符

android blink character in textview

我可以将 TextView 中的单个字符设置为闪烁吗?

使用 "spannable" 我可以设置颜色、字体粗细等,但我没有找到任何关于闪烁的信息。

"Animation" AFAIK 适用于整个视图。

有什么建议吗?

你可以开始使用那个自定义 class:

class FCS extends ForegroundColorSpan implements TimeAnimator.TimeListener {

    private TextView tv;
    private int[] colors;
    private int color;
    TimeAnimator animator;
    ArgbEvaluator evaluator;

    public FCS(TextView tv, int[] colors) {
        super(colors[0]);
        this.tv = tv;
        this.colors = colors;
        animator = new TimeAnimator();
        animator.setTimeListener(this);
        evaluator = new ArgbEvaluator();
        animator.start();
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        ds.setColor(color);
    }

    @Override
    public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) {
        float sin = (float) (Math.sin(Math.PI * totalTime / 1000f));
        float fraction = sin * sin;
//        float fraction = (float) (-Math.cos(2*Math.PI * totalTime / 1000f) + 1) / 2f;
        color = (int) evaluator.evaluate(fraction, colors[0], colors[1]);
        tv.invalidate();
        if (totalTime > 20000) {
            animator.end();
        }
    }
}

测试代码(放在Activity#onCreate方法中):

TextView tv = new TextView(this);
tv.setTextSize(40);
int[] colors = {
        tv.getCurrentTextColor(),
        Color.RED,
};
SpannableStringBuilder ssb = new SpannableStringBuilder();
ssb.append("Poeta de ");
int start = ssb.length();
ssb.append("magnum stella, dignus sectam!");
ssb.setSpan(new FCS(tv, colors), start, start+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(ssb);
setContentView(tv);