自定义动画之自定义HSVEvaluator(颜色渐变)

// 自定义 HslEvaluator

private class HsvEvaluator implements TypeEvaluator<Integer> {
   float[] startHsv = new float[3];
   float[] endHsv = new float[3];
   float[] outHsv = new float[3];
   
   @Override
   public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
       // 把 ARGB 转换成 HSV
       Color.colorToHSV(startValue, startHsv);
       Color.colorToHSV(endValue, endHsv);
       
       // 计算当前动画完成度(fraction)所对应的颜色值
       if (endHsv[0] - startHsv[0] > 180) {
           endHsv[0] -= 360;
       } else if (endHsv[0] - startHsv[0] < -180) {
           endHsv[0] += 360;
       }
       outHsv[0] = startHsv[0] + (endHsv[0] - startHsv[0]) * fraction;
       if (outHsv[0] > 360) {
           outHsv[0] -= 360;
       } else if (outHsv[0] < 0) {
           outHsv[0] += 360;
       }
       outHsv[1] = startHsv[1] + (endHsv[1] - startHsv[1]) * fraction;
       outHsv[2] = startHsv[2] + (endHsv[2] - startHsv[2]) * fraction;
       // 计算当前动画完成度(fraction)所对应的透明度
       int alpha = startValue >> 24 + (int) ((endValue >> 24 - startValue >> 24) * fraction);

       // 把 HSV 转换回 ARGB 返回
       return Color.HSVToColor(alpha, outHsv);
   }
}
ObjectAnimator animator = ObjectAnimator.ofInt(view, "color", 0xff00ff00);
// 使用自定义的 HslEvaluator
animator.setEvaluator(new HsvEvaluator());
animator.start();

出处http://mp.weixin.qq.com/s/k0nfDfktf3CcGnFR9nY_GQ

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,401评论 25 709
  • 有许多教学框架都会在结束时设置类似“实践运用”的部分,如果学生能认真地花时间来完成这个部分,那确实有好处。但是,可...
    陈蕾FZ阅读 1,745评论 0 50
  • 下雨的日子里, 总会感到格外沉寂。 或许是心情使然, 世间万物都已成了空寂。 没有琐事的喧嚣, 仅存小雨滴答的痕迹...
    星岚酱阅读 209评论 0 1
  • 我理解的爱情就是有个温暖的你,为我撑起一片可以任性的天空;有个陪我笑陪我闹的你,在你身边我可以任意撒娇,你亦可以卸...
    雨逸阅读 271评论 0 1
  • 虽然已经到了我最喜欢的秋天,可是“秋高气爽”依旧离我们很远,中午的烈日让睡在床上的我感觉自己犹如铁板烧,烤了...
    脑洞舍七阅读 584评论 0 0