Note that there are some explanatory texts on larger screens.

plurals
  1. POText color animation
    text
    copied!<p>Is there a way to animate a text color change (from anycolor to white)?</p> <p>The only variant I came up with, is placing two textviews (with the same text) in one place, and fading the top one, so the bottom one (that has a white color) will become visible.</p> <p>P.S. I scrapped the variant of the 2 TextViews since it looked weird (edges weren't smooth and, since I have a lot of such elements on the screen it was really lagging the scrolling). What I did, was a crazy hack that does the animation with the use of a Thread and setTextColor (that also forces redraw of a textview).</p> <p>Since I needed only 2 color changes (from red to white, and from green to white) I hardcoded the values and all of the transition colors between them. So here's how it looks:</p> <pre><code>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 &lt; 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; } } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload