iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android实现颜色渐变动画效果
  • 817
分享到

Android实现颜色渐变动画效果

2024-04-02 19:04:59 817人浏览 泡泡鱼
摘要

目录前言一、Android中插值器TypeEvaluator二、案例效果实现1.利用Android自带的颜色插值器ArgbEvaluator2.看看Android自带颜色插值器Arg

本文实例为大家分享了Android颜色渐变动画效果的实现代码,供大家参考,具体内容如下

前言

案例效果的实现比较简单,利用Android自带的颜色插值器ArgbEvaluator()进行计算即可,而本文的重点就是讲讲插值器。

效果图:

一、Android中插值器TypeEvaluator

TypeEvaluator是一个接口,在开发中可以自定义该接口实例,利用ValueAnimator的setEvaluator(TypeEvaluator)方法来控制动画的更新计算表达式。在日常开发中,不可能只是需要操纵单一数值的变化,如果需要同时操纵对象的多个属性,如定义动画的x,y移动的坐标等,那就需要对TypeEvaluator有所了解了。

二、案例效果实现

1.利用Android自带的颜色插值器ArgbEvaluator

ValueAnimator colorAnim = ObjectAnimator.ofInt(this, "backgroundColor", RED, BLUE);
        colorAnim.setDuration(4000);
        colorAnim.setEvaluator(new ArgbEvaluator());
        colorAnim.setRepeatCount(ValueAnimator.INFINITE);
        colorAnim.setRepeatMode(ValueAnimator.REVERSE);
        colorAnim.start();

2.看看Android自带颜色插值器ArgbEvaluator核心代码

@Override
    public Object evaluate(float fraction, Object startValue, Object endValue) {
        int startInt = (Integer) startValue;
        float startA = ((startInt >> 24) & 0xff) / 255.0f;
        float startR = ((startInt >> 16) & 0xff) / 255.0f;
        float startG = ((startInt >>  8) & 0xff) / 255.0f;
        float startB = ( startInt        & 0xff) / 255.0f;

        int endInt = (Integer) endValue;
        float endA = ((endInt >> 24) & 0xff) / 255.0f;
        float endR = ((endInt >> 16) & 0xff) / 255.0f;
        float endG = ((endInt >>  8) & 0xff) / 255.0f;
        float endB = ( endInt        & 0xff) / 255.0f;

        // 将sRGB转化成线性
        startR = (float) Math.pow(startR, 2.2);
        startG = (float) Math.pow(startG, 2.2);
        startB = (float) Math.pow(startB, 2.2);

        endR = (float) Math.pow(endR, 2.2);
        endG = (float) Math.pow(endG, 2.2);
        endB = (float) Math.pow(endB, 2.2);

        //在线性空间中计算插值的颜色
        float a = startA + fraction * (endA - startA);
        float r = startR + fraction * (endR - startR);
        float g = startG + fraction * (endG - startG);
        float b = startB + fraction * (endB - startB);

        //转换回sRGB在[0..255]范围
        a = a * 255.0f;
        r = (float) Math.pow(r, 1.0 / 2.2) * 255.0f;
        g = (float) Math.pow(g, 1.0 / 2.2) * 255.0f;
        b = (float) Math.pow(b, 1.0 / 2.2) * 255.0f;

        return Math.round(a) << 24 | Math.round(r) << 16 | Math.round(g) << 8 | Math.round(b);
    }

3.根据ArgbEvaluator的实现来自定义一个颜色插值器

public class MyColorEvaluator implements TypeEvaluator

接下来换一种颜色的计算方式,在本人看相关api的过程中,发现Color中有colorToHSV和HSVToColor的方法,于是在网上找了一个HVS的计算方式。(以下代码来源于网络)。

@Override
    public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
        Color.colorToHSV(startValue,startHsv);
        Color.colorToHSV(endValue,endHsv);
        int alpha = startValue >> 24 + (int) ((endValue >> 24 - startValue >> 24) * fraction);
        // 计算当前动画完成度(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;


        return Color.HSVToColor(alpha,outHsv);

    }

4.使用自己定义的颜色插值器MyColorEvaluator

ValueAnimator colorAnim = ObjectAnimator.ofInt(this, "backgroundColor", RED, BLUE);
        colorAnim.setDuration(4000);
        colorAnim.setEvaluator(new MyColorEvaluator());
        colorAnim.setRepeatCount(ValueAnimator.INFINITE);
        colorAnim.setRepeatMode(ValueAnimator.REVERSE);
        colorAnim.start();

三、源码

ColorGradient.java:

public class ColorGradient extends View {

    public ColorGradient(Context context) {
        super(context);
    }

    public ColorGradient(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        animation();
    }

    public ColorGradient(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    private void animation(){
        ValueAnimator colorAnim = ObjectAnimator.ofInt(this, "backgroundColor", RED, BLUE);
        colorAnim.setDuration(4000);
        colorAnim.setEvaluator(new MyColorEvaluator());
        colorAnim.setRepeatCount(ValueAnimator.INFINITE);
        colorAnim.setRepeatMode(ValueAnimator.REVERSE);
        colorAnim.start();
    }

    
}

MyColorEvaluator.java:

public class MyColorEvaluator 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) {
        Color.colorToHSV(startValue,startHsv);
        Color.colorToHSV(endValue,endHsv);
        int alpha = startValue >> 24 + (int) ((endValue >> 24 - startValue >> 24) * fraction);
        // 计算当前动画完成度(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;


        return Color.HSVToColor(alpha,outHsv);

    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Android实现颜色渐变动画效果

本文链接: https://www.lsjlt.com/news/148468.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android实现颜色渐变动画效果
    目录前言一、Android中插值器TypeEvaluator二、案例效果实现1.利用Android自带的颜色插值器ArgbEvaluator2.看看Android自带颜色插值器Arg...
    99+
    2024-04-02
  • Android怎么实现颜色渐变动画效果
    本篇内容主要讲解“Android怎么实现颜色渐变动画效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么实现颜色渐变动画效果”吧!效果图:一、Android中插值器TypeEva...
    99+
    2023-06-30
  • android颜色渐变动画效果怎么实现
    在Android中,你可以使用ValueAnimator和ArgbEvaluator类来实现颜色渐变动画效果。下面是一个简单的示例代...
    99+
    2023-08-18
    android
  • Android Textview实现颜色渐变滚动效果
    本文实例为大家分享了Android颜色渐变滚动展示的具体代码,供大家参考,具体内容如下public class FlashTextView extends android.support.v7.widget.AppCompatTextVie...
    99+
    2023-05-30
    android textview 渐变
  • Android实现背景颜色滑动渐变效果的全过程
    目录前言一、介绍一下GradientDrawable二、实现三、源码:总结前言 今天和朋友聊到这个功能,刚开始的想法是自定义view,如何进行滑动监听,经过一列操作完成效果后,发现...
    99+
    2024-04-02
  • CSS怎么实现颜色渐变效果
    这篇文章主要介绍“CSS怎么实现颜色渐变效果”,在日常操作中,相信很多人在CSS怎么实现颜色渐变效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS怎么实现颜色渐变效果”...
    99+
    2024-04-02
  • Android TextView渐变颜色和方向及动画效果的设置详解
    GradientTextView Github点我 一个非常好用的库,使用kotlin实现,用于设置TexView的字体 渐变颜色、渐变方向 和 动画效果 添加依赖 之前仓库发布在...
    99+
    2024-04-02
  • Android中如何设置TextView渐变颜色和方向及动画效果
    这篇文章主要介绍Android中如何设置TextView渐变颜色和方向及动画效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!添加依赖之前仓库发布在 jcenter,但是因为它即将不可用,近期已完成迁移。建议大家使用...
    99+
    2023-06-25
  • .NET与树莓派WS28XX灯带的颜色渐变动画效果的实现
    在上一篇水文中,老周演示了 WS28XX 的基本使用。在文末老周说了本篇介绍颜色渐变动画的简单实现。 在正式开始前,说一下题外话。 第一件事,最近树莓派的价格猛涨,相信有关注的朋友都...
    99+
    2024-04-02
  • Android实现流动的渐变色边框效果
    目录前言实现思路总结前言 记得在介绍 motion_toast 一篇的时候,开篇有一张动图,边框是渐变色而且感觉是流动的。这个动效挺有趣的,当时也有人问怎么实现,经过上一篇《让你的聊...
    99+
    2024-04-02
  • swift实现颜色渐变以及转换动画
    本文是通过结合使用CAGradientLayer、CABasicAnimation以及CAAnimationDelegate来达到颜色渐变以及转换的动画,下面是今天要达成的效果图: ...
    99+
    2024-04-02
  • 使用CSS3怎么实现颜色渐变效果
    本篇文章给大家分享的是有关使用CSS3怎么实现颜色渐变效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。<h2 class="site__title&...
    99+
    2023-06-08
  • css怎么实现背景颜色渐变效果
    本文小编为大家详细介绍“css怎么实现背景颜色渐变效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“css怎么实现背景颜色渐变效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。首先,在页面中创建一个div标签;...
    99+
    2023-07-04
  • jQuery如何实现字体颜色渐变效果
    这篇文章给大家分享的是有关jQuery如何实现字体颜色渐变效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:jQuery不允许css属性值为非数字的属性进行动画处理,比...
    99+
    2024-04-02
  • Android中怎么自定义渐变颜色效果
    Android中怎么自定义渐变颜色效果,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。xml定义渐变颜色首先,你在drawable目录下写一个xml,代码如下<xml&...
    99+
    2023-05-30
    android
  • Unity实现颜色渐变滑动条
    本文实例为大家分享了Unity实现颜色渐变滑动条的具体代码,供大家参考,具体内容如下 效果展示 代码 直接挂在UGUI Slider上即可 using UnityEngine;...
    99+
    2024-04-02
  • css中怎么实现文字颜色渐变效果
    css中怎么实现文字颜色渐变效果,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。基础样式:.gradient-text{text-align:&...
    99+
    2024-04-02
  • css如何实现背景颜色线性渐变和径向渐变效果
    这篇文章主要介绍了css如何实现背景颜色线性渐变和径向渐变效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇css如何实现背景颜色线性渐变和径向渐变效果文章都会有所收获,下面我们一起来看看吧。一、线性渐变(li...
    99+
    2023-07-05
  • Android如何实现渐变色水波纹效果
    这篇文章主要介绍了Android如何实现渐变色水波纹效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。项目中使用到的效果,效果图如下:代码实现:public cla...
    99+
    2023-06-21
  • Css3中如何实现hover动画的颜色动画效果
    这篇文章主要为大家展示了“Css3中如何实现hover动画的颜色动画效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Css3中如何实现hover动画的颜色动画...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作