Gibt es eine Möglichkeit, eine Textfarbe zu ändern (von Anycolor zu Weiß)?Text Farbanimation
Die einzige Variante, die ich erfunden habe, ist das Platzieren von zwei Textansichten (mit demselben Text) an einer Stelle und das Ausblenden der oberen, so dass die untere (die eine weiße Farbe hat) sichtbar wird.
P.S. Ich habe die Variante der 2 TextViews verschrottet, da sie seltsam aussah (die Kanten waren nicht glatt und, da ich viele solcher Elemente auf dem Bildschirm habe, lag das Scrollen wirklich hinterher). Was ich getan habe, war ein verrückter Hack, der die Animation mit der Verwendung eines Threads und setTextColor ausführt (was auch das Neuzeichnen einer Textansicht erzwingt).
Da ich nur 2 Farbänderungen brauchte (von rot nach weiß und von grün nach weiß) habe ich die Werte und alle Übergangsfarben zwischen ihnen fest programmiert. Also hier ist, wie es aussieht:
public class BlinkingTextView extends TextView {
public BlinkingTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void animateBlink(final boolean red) {
if (animator != null) {
animator.drop();
}
animator = new Animator(this, red);
animator.start();
}
public void clearBlinkAnimation() {
if (animator != null) {
animator.drop();
}
}
private Animator animator;
private final static class Animator extends Thread {
public Animator(final TextView textView, final boolean red) {
this.textView = textView;
if (red) {
SET_TO_USE = RED;
} else {
SET_TO_USE = GREEN;
}
}
private TextView textView;
private final int[] SET_TO_USE;
private final static int[] RED = {
-2142396,
-2008754,
-1874854,
-1740697,
-1540490,
-1405563,
-1205099,
-1004634,
-804170,
-669243,
-469036,
-334879,
-200979,
-67337,
-1
};
private final static int[] GREEN = {
-6959821,
-6565826,
-6106293,
-5646758,
-5055894,
-4530309,
-3939444,
-3283042,
-2692177,
-2166592,
-1575728,
-1116193,
-656660,
-262665,
-1
};
private boolean stop;
@Override
public void run() {
int i = 0;
while (i < 15) {
if (stop) break;
final int color = SET_TO_USE[i];
if (stop) break;
textView.post(new Runnable() {
@Override
public void run() {
if (!stop) {
textView.setTextColor(color);
}
}
});
if (stop) break;
i++;
if (stop) break;
try {
Thread.sleep(66);
} catch (InterruptedException e) {}
if (stop) break;
}
}
public void drop() {
stop = true;
}
}
}
Dank . Ich habe die Methode, über die ich gesprochen habe, nicht implementiert (nur darüber nachgedacht). Vielen Dank, ich werde Ihre Methode jetzt versuchen :) –