android - ValueAnimator 使用 Button 但不使用 LinearLayout
问题描述
以下代码在提供的视图是 Button 时有效,但当它是 LinearLayout 时没有任何反应(背景颜色不会改变)。
如果我在没有 ValueAnimator 的情况下手动设置 LinearLayout 的颜色,它就可以工作。我也尝试使用 ObjectAnimator,但结果看起来很糟糕。
一个示例调用:
playBlinkAnimation(view, activity.getResources().getColor(R.color.transparent), activity.getResources().getColor(R.color.colorRed), 5000);
view.getBackground().setColorFilter(activity.getResources().getColor(R.color.colorRed), PorterDuff.Mode.DARKEN);
private void playBlinkAnimation(final View view, int colorFrom, int colorTo, int duration) {
ValueAnimator colorAnimation = new ValueAnimator();
colorAnimation.setIntValues(colorFrom, colorTo);
colorAnimation.setEvaluator(new ArgbEvaluator());
colorAnimation.setDuration(duration);
colorAnimation.setRepeatCount(ValueAnimator.INFINITE);
colorAnimation.setRepeatMode(ValueAnimator.REVERSE);
colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
view.getBackground().setColorFilter((int) animator.getAnimatedValue(), PorterDuff.Mode.DARKEN);
}
});
colorAnimation.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
view.getBackground().setColorFilter(null);
}
@Override
public void onAnimationCancel(Animator animation) {
view.getBackground().setColorFilter(null);
view.setAlpha(1);
view.getBackground().setColorFilter(null);
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
colorAnimation.start();
}
解决方案
您可以尝试使用 AnimatorSet 和它的 playTogether 功能。它需要一组 Animator,它旨在一起运行多个动画,但它也应该只与一个动画一起工作。
希望对你有帮助!
推荐阅读
- javascript - 使用 MobX 将输入绑定到 React Dumb 组件内的变量
- c# - Xamarin 表单绑定 - 访问父属性
- c++ - 从函数返回 boost streambuf
- python - 如何一个接一个地运行多个 python 脚本?
- c# - 无法从 C# 中的属性访问值
- javascript - Webpack 插件创建监视文件夹
- python - How to perform multiple pandas data type changes on different columns with one function?
- docker - COPY in Dockerfile?
- php - php excel导入在新服务器上不起作用
- python - Python 文件服务器仅适用于一个线程运行