вы можете начать играть с этим пользовательским классом:
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);
расширение 'BackgroundColorSpan' /' ForegroundColorSpan', переопределение 'updateDrawState (TextPaint ds) 'и заставит ваш TextView перерисовать после установки нового' ds.bgColor' – pskink
и, да, вы можете сделать это с помощью «Анимации», скорее всего, используя «ValueAnimator' /' ObjectAnimator' или 'TimeAnimator' (в зависимости от ваш случай пользователя), вы пытались расширить sp ans i, упомянутых выше? – pskink
Благодарим вас за подсказки. Тем не менее, мне нужно сделать домашнее задание сейчас и прочитать некоторые документы об охватах - по крайней мере, я знаю, с чего начать :) – Vladimir