有没有一种方法可以使文本颜色动画变化(从任何颜色到白色)?
我想到的唯一变通方法是在同一个位置放置两个文本视图(具有相同的文本),并淡化顶部的一个,这样底部的那个(具有白色)就会变得可见。
附注:我放弃了使用两个TextView的方法,因为它看起来很奇怪(边缘不平滑,并且由于我屏幕上有很多这样的元素,所以滚动非常卡顿)。我做的是一个疯狂的hack,它使用Thread和setTextColor进行动画处理(这也会强制重绘一个TextView)。
由于我只需要两种颜色变化(从红色到白色,从绿色到白色),我硬编码了值和它们之间所有的过渡颜色。所以它的外观如下:
我想到的唯一变通方法是在同一个位置放置两个文本视图(具有相同的文本),并淡化顶部的一个,这样底部的那个(具有白色)就会变得可见。
附注:我放弃了使用两个TextView的方法,因为它看起来很奇怪(边缘不平滑,并且由于我屏幕上有很多这样的元素,所以滚动非常卡顿)。我做的是一个疯狂的hack,它使用Thread和setTextColor进行动画处理(这也会强制重绘一个TextView)。
由于我只需要两种颜色变化(从红色到白色,从绿色到白色),我硬编码了值和它们之间所有的过渡颜色。所以它的外观如下:
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;
}
}
}
colorAnim.setDuration(1000);
。 - MarceloBarbosa