一款炫酷Loading动画--载入失败

简单介绍

上一篇文章一款炫酷Loading动画–载入成功。给大家介绍了成功动画的绘制过程,这篇文章将接着介绍载入失败特效的制作。

相比成功动画,有了前面的经验,失败动画的过程就显得比較简单了。

动画结构分析

首先我们来看失败动画的一张图:

失败动画的状态转移描写叙述例如以下:

1、载入过程,画蓝色圆环,当进度为100%时。圆环完毕

2、从右側抛出蓝色小方块。小方块沿着曲线到达圆环正上方

3、小方块突然消失。红色感叹号逐渐出现

4、感叹号完整出现以后。圆环变红色。感叹号发生震动

因为前两个过程,和载入成功是一样的,所以我们主要来看过程3,4

红色感叹号逐渐出现

逐渐”,有这两个字。我们就应该知道这是一个动画效果。

将感叹号分成两个路径,较长的和较短的。剩下来的工作。就是我们将这个路径逐渐绘制出来。

这个思路和之前的绿色勾等的绘制是一样的。

我们须要一个计时器,两个路径Path,和相应的PathMeasure

这里我们结合代码说得更清楚些。路径是这种:

        //感叹号路径
        Path commaPath1 = new Path();
        Path commaPath2 = new Path();
        commaPath1.moveTo(2f * radius+strokeWidth, 1.25f * radius+strokeWidth);
        commaPath1.lineTo(2f * radius+strokeWidth, 2.25f * radius+strokeWidth);
        commaPath2.moveTo(2f * radius+strokeWidth, 2.75f * radius+strokeWidth);
        commaPath2.lineTo(2f * radius+strokeWidth, 2.5f * radius+strokeWidth);
        commaPathMeasure1 = new PathMeasure(commaPath1,false);
        commaPathMeasure2 = new PathMeasure(commaPath2,false);

计时器就简单了,是一个ValueAnimator

        //感叹号动画
        mCommaAnimation = ValueAnimator.ofFloat(0f, 1f);
        mCommaAnimation.setDuration(500);
        mCommaAnimation.setInterpolator(new AccelerateInterpolator());
        mCommaAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                commaPrecent = (float) animation.getAnimatedValue();
                invalidate();
            }
        });

最后,利用PathMeasure计算出的部分路径。就能够逐渐将完整路径绘制出来

    /**
     * 绘制感叹号
     */
    private void drawComma(Canvas canvas) {
        Path path1 = new Path();
        commaPathMeasure1.getSegment(0, commaPrecent * commaPathMeasure1.getLength(), path1, true);
        path1.rLineTo(0, 0);
        Path path2 = new Path();
        commaPathMeasure2.getSegment(0, commaPrecent * commaPathMeasure2.getLength(), path2, true);
        path2.rLineTo(0, 0);
        canvas.drawPath(path1, commaPaint);//较长
        canvas.drawPath(path2, commaPaint);//较短
        canvas.drawArc(mRectF, 0, 360, false, commaPaint);//红色圆环
    }

红色感叹号震动

震动效果怎么实现了,我的思路是旋转画布!

细致观察震动效果,会发现过程是这种:

向左偏移-》回到中间-》向右偏移-》回到中间-》向左偏移-》。

这意味着震动事实上是一个高速偏移的过程,可是要偏移一定角度。再绘制感叹号会比較麻烦。我想出来的办法,就是将画布偏移,而不是将感叹号偏移

于是我们的计时器是这种:

        //震动动画
        mshockAnimation = ValueAnimator.ofInt(-1, 0, 1, 0, -1, 0,1,0);
        mshockAnimation.setDuration(1000);

        mshockAnimation.setInterpolator(new LinearInterpolator());
        mshockAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                shockPrecent = (int) animation.getAnimatedValue();
                invalidate();
            }

        });

假设是-1,画布就向左旋转30度,0就不旋转。1就向右旋转30度。

/**
     * 绘制震动效果
     * @param canvas
     */
    private void drawShockComma(Canvas canvas) {
        Path path1 = new Path();
        commaPathMeasure1.getSegment(0, commaPathMeasure1.getLength(), path1, true);
        path1.rLineTo(0, 0);
        Path path2 = new Path();
        commaPathMeasure2.getSegment(0, commaPathMeasure2.getLength(), path2, true);
        path2.rLineTo(0, 0);

        if (shockPrecent!=0){
            canvas.save();
            if (shockPrecent==1)
                canvas.rotate(shockDir, 2 * radius, 2 * radius);
            else if(shockPrecent==-1)
                canvas.rotate(-shockDir, 2 * radius, 2 * radius);
        }
        canvas.drawPath(path1, commaPaint);
        canvas.drawPath(path2, commaPaint);
        canvas.drawArc(mRectF, 0, 360, false, commaPaint);
        if (shockPrecent!=0) {
            canvas.restore();
        }
    }

当中注意,canvas.save()方法和canvas.restore()方法必须成对使用,然后我们调用canvas.rotate()方法,就能够旋转画布了。

写在最后

有了前面的经验,失败动画事实上就是新瓶装旧酒了。使用画布旋转来实现震动。这个思路也是比較有趣的。

对于API不熟悉的朋友,建议用到的时候去查官方文档。或者看看其它朋友的一些介绍基础的文章。

最后。提供源代码下载地址github地址。欢迎大家下载和star。

时间: 2024-08-05 15:28:37

一款炫酷Loading动画--载入失败的相关文章

一款炫酷Loading动画--加载失败

简介 上一篇文章一款炫酷Loading动画–加载成功,给大家介绍了成功动画的绘制过程,这篇文章将接着介绍加载失败特效的制作. 相比成功动画,有了前面的经验,失败动画的过程就显得比较简单了. 动画结构分析 首先我们来看失败动画的一张图: 失败动画的状态转移描述如下: 1.加载过程,画蓝色圆环,当进度为100%时,圆环完成 2.从右侧抛出蓝色小方块,小方块沿着曲线到达圆环正上方 3.小方块突然消失,红色感叹号逐渐出现 4.感叹号完整出现以后,圆环变红色,感叹号发生震动 由于前两个过程,和加载成功是一

一款炫酷Loading动画--加载成功

简介 昨天在简书上看到一篇文章,介绍了一个加载动画的实现过程 一款Loading动画的实现思路(一) 只可惜原动画是IOS上制作的,而看了一下,作者的实现思路比较复杂,于是趁着空闲写了一个Android版本,这篇文章将给大家介绍一下实现过程. 首先让我们来看一下动画效果 动画结构分析 从上面的gif图中可以看到,这个加载动画有成功,失败两种状态,由于Gif速度比较快,我们再来分别看一张慢图 1.成功状态加载动画 成功动画的状态转移描述如下: 1.加载过程,画蓝色圆环,当进度为100%时,圆环完成

Android实现炫酷SVG动画效果

svg是目前十分流行的图像文件格式了,svg严格来说应该是一种开放标准的矢量图形语言,使用svg格式我们可以直接用代码来描绘图像,可以用任何文字处理工具打开svg图像,通过改变部分代码来使图像具有交互功能,并可以随时插入到HTML中通过浏览器(如火狐浏览器)来观看.使用svg格式可让你设计激动人心的.高分辨率的Web图形页面. svg格式具备目前网络流行的jpg和png等格式无法具备的优势:可以任意放大图形显示,但绝不会以牺牲图像质量为代价;可在svg图像中保留可编辑和可搜寻的状态;平均来讲,s

uwp - 做一个相对炫酷的动画按钮/按钮动画

看腻了系统自带的button animation何不尝试下自定义一个较为炫酷的动画顺便提升用户体验.效果图: 动画分为几个部分,分别是:内圆从中心放大(1)并同时渐隐(2),外圆从中心放大(3)并同时渐隐(4),按钮整体从中心缩小放大(5),非常简单对吧,代码也是. 为了方便调用,我用一个自定义用户控件来做,图标是用iconfont,这样可以在任何地方使用,首先新建[AnimationButton.xaml]用户控件,前台代码将自动生成的部分替换: <UserControl.Resources>

unity 3D炫酷开场动画

////////////////////2015/07/07////////// ///////////////////by xbw//////////////// /////////////////环境 unity 4.6.1/// 游戏之前播放一段炫酷的动画是不是很能增加吸引力: unity支持的视频格式有mov. mpg. mpeg. mp4. avi. asf. 我们把需要的视频直接拖进Project中, 接下来就是代码了: using UnityEngine; using System

手把手带你做一个超炫酷loading成功动画view Android自定义view

写在前面: 本篇可能是手把手自定义view系列最后一篇了,实际上我也是一周前才开始真正接触自定义view,通过这一周的练习,基本上已经熟练自定义view,能够应对一般的view需要,那么就以本篇来结尾告一段落,搞完毕设的开题报告后去学习新的内容. 有人对我说类似的效果网上已经有了呀,直接拿来就可以用,为什么还要写.我个人的观点是:第三方控件多数不能完全满足UI的要求,如果需要修改,那么必须理解他的实现,所以很有必要自己去写一款出来,成为程序的创造者,而不单单是使用者.所以,写一写已经实现的效果,

8款炫酷的HTML5特效源码

HTML5的强大不仅在于可以让网页元素更加灵活多变,更在于它可以很方便的实现网页动画的特效,可以让你的网站更加富有现代化特色.今天,小编就给大家分享8个让人难忘的HTML5炫酷动画~ 1.HTML5 Canvas火焰闪烁动画 火焰跟随鼠标(特效展示)(源码下载) 该款动画是基于Canvas,火焰上下窜动的效果非常逼真,而且火焰可以跟随鼠标移动,是一款非常酷炫的HTML5 Canvas动画. 2.HTML5/CSS3圆盘秒表动画 秒表可暂停计时(特效展示)(源码下载) 一款基于HTML5和CSS3

【七款炫酷的页面特效】

1.HTML5 Canvas粒子模拟效果 这是一款利用HTML5 Canvas模拟出来的30000个粒子动画,当你用鼠标在canvas画布上移动时,鼠标周围的一些粒子就会跟着你移动,并形成一定的图案,就像你在玩沙画一样,效果非常不错.这里,我们应用了一些HTML5的特性,让这个粒子动画显得相当动感. 在线演示 源码下载 2.HTML5火焰文字特效 今天我们分享的这款HTML5文字特效是火焰燃烧的效果,比较消耗CPU,但是动画效果还是比较酷的.另外,再推荐一款HTML5文字特效:HTML5像素文字

10款炫酷的jQuery和css3动画插件及源码

1.jQuery超酷平面时钟特效插件 这是一个非常具有创意的jQuery时钟插件,它不像其他的时钟插件一样是圆盘的或者是数字的,它是一个平面时钟,日期和时分秒的指针都是在平面上移动计时的,尽管这款jQuery平面时钟插件不能广泛应用,但是创意是绝对可以肯定的. 在线演示 源码下载 2.4款基于jquery的列表图标动画切换特效 网页中列表图标随处可见,特别是移动网页上,基本上的导航都采用了列表图标.今天给大家分享4款基于juqery的列表图标和关闭图标的动画切换特效. 在线演示 源码下载 3.随