La chaîne de caractères de mon TextView est divisée en travées de trois lettres chacune (Triplets) au cours de l'exécution, au fur et à mesure que j'ajoute des lettres à ce TextView. Et je définis quatre couleurs d'arrière-plan différentes pour ces triplets de manière cyclique :
void color(TextView textView) {
String sequenceColored = textView.getText().toString();
SpannableString ss = new SpannableString(sequenceColored);
int iter = 0;
if (textView.getId() == R.id.sequence) {
for (int i = 0; i < sequenceColored.length(); i += 3, iter++) {
if (iter == 0) {
ss.setSpan(new BackgroundColorSpan(Color.argb(123, 255, 136, 0)), i, i + 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
} else if (iter == 1) {
ss.setSpan(new BackgroundColorSpan(Color.argb(123, 255, 187, 51)), i, i + 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
} else if (iter == 2) {
ss.setSpan(new BackgroundColorSpan(Color.argb(123, 0, 153, 204)), i, i + 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
} else if (iter == 3) {
ss.setSpan(new BackgroundColorSpan(Color.argb(123, 170, 102, 204)), i, i + 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
iter = -1;
}
}
}
}
La question est donc la suivante : est-il possible d'animer ce changement de couleur d'arrière-plan, de le faire apparaître lentement et joliment à partir d'une couleur d'arrière-plan inexistante ?
SpannableString n'est pas une vue, je ne peux donc pas l'animer traditionnellement, n'est-ce pas ?
Mise à jour
J'ai essayé de mettre en place cette animation en exécutant le code suivant à l'intérieur du premier inner if
:
ValueAnimator animation = ValueAnimator.ofInt(0, 123);
animation.start();
final int finalI = i;
animation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
ss.setSpan(new BackgroundColorSpan(Color.argb((int)animation.getAnimatedValue(), 255, 136, 0)), finalI, finalI + 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
});
Mais il ne définit pas du tout la couleur d'arrière-plan de la travée.