我试图让TextView以一个名为" interval"的变量指定的间隔反转背景和文本颜色。 (表示毫秒的整数值)。
目前,我正在为每个属性使用ObjectAnimator,然后使用AnimatorSet对象将它们一起播放。这有效;但是,我不确定如何摆脱所有的过渡色。我不需要平稳过渡,只需要一个坚硬的闪光。我尝试使用setFrameDelay(interval)来完成此任务,但这不起作用。
我曾经尝试过使用单独的线程/ runnable,但是我一直在遇到需要在执行其他操作之前停止线程的问题。我无法让新动作可靠地等待线程停止,所以当时机不正确时,我最终会得到奇怪的背景和文本叠加。使用Android的动画框架似乎更适合轻松启动和停止。
以下是与我合作的代码:
ObjectAnimator backgroundColorValueAnimator = ObjectAnimator.ofInt(
textView,
"backgroundColor",
Color.BLACK,
Color.parseColor(globalSettings.color)
);
ObjectAnimator textColorValueAnimator = ObjectAnimator.ofInt(
textView,
"textColor",
Color.parseColor(globalSettings.color),
Color.BLACK
);
backgroundColorValueAnimator.setFrameDelay(interval);
textColorValueAnimator.setFrameDelay(interval);
backgroundColorValueAnimator.setRepeatCount(ObjectAnimator.INFINITE);
backgroundColorValueAnimator.setRepeatMode(ObjectAnimator.RESTART);
textColorValueAnimator.setRepeatCount(ObjectAnimator.INFINITE);
textColorValueAnimator.setRepeatMode(ObjectAnimator.RESTART);
globalSettings.invertBackground = new AnimatorSet();
globalSettings.invertBackground.play(backgroundColorValueAnimator).with(textColorValueAnimator);
globalSettings.invertBackground.setDuration(interval);
globalSettings.invertBackground.start();
非常感谢任何帮助。
答案 0 :(得分:0)
您可以使用ValueAnimator
进行倒计时和自定义ValueAnimator.AnimatorUpdateListener
:
ValueAnimator myColorAnimator;
MyColorUpdateListener myColorUpdateListener;
int interval = 2000;
@Override
public void onCreate(Bundle savedState){
TextView textView = (TextView) findViewById(R.id.textView);
myColorAnimator = ValueAnimator.ofObject(new IntEvaluator(), 0, 2 * interval);
myColorAnimator.setDuration(2 * interval);
myColorUpdateListener = new MyColorUpdateListener(textView, Color.BLACK, Color.parseColor(globalSettings.color), interval );
myColorAnimator.addUpdateListener(myColorUpdateListener);
myColorAnimator.setInterpolator(new LinearInterpolator());
myColorAnimator.setRepeatCount(ObjectAnimator.INFINITE);
myColorAnimator.setRepeatMode(ObjectAnimator.RESTART);
myColorAnimator.start();
}
自定义ValueAnimator.AnimatorUpdateListener
的代码:
public class MyColorUpdateListener implements ValueAnimator.AnimatorUpdateListener {
private TextView textView;
private int colorText, colorBackground, interval;
MyColorUpdateListener(TextView tv, int colorBg, int colorText, int interval) {
this.textView = tv;
this.colorText = colorText;
this.colorBackground = colorBg;
this.interval = interval;
}
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Object o = animation.getAnimatedValue();
int counter = (int)o;
if (counter == 0)
{
textView.setBackgroundColor(colorBackground);
textView.setTextColor(colorText);
}
else if (counter == interval)
{
textView.setBackgroundColor(colorText);
textView.setTextColor(colorBackground);
}
}
}