Android高级动画(4)完结篇

目录

Android高级动画(1)http://www.jianshu.com/p/48554844a2db
Android高级动画(2)http://www.jianshu.com/p/89cfd9042b1e
Android高级动画(3)http://www.jianshu.com/p/d6cc8d218900
Android高级动画(4)http://www.jianshu.com/p/91f8363c3a8c

回顾

终于到了完结篇,简单对前面三篇做个总结。Android系统为我们提供了丰富的动画, 罗列如下:
Tween动画,属性动画,Frame动画,CircularReveal,Activity转场动画,5.0转场动画又分为Explode、Slide、Alpha、ShareElements,矢量动画,矢量动画分为pathMorphing、trimPath。为了弥补一矢量动画不能代码动态构建的缺点,我们自己封装了PathMorphingView和TrimPathView。对于复杂图形,我们不能手动计算路径的,可以使用GIMP、Illustrator这样的工具,但是这些工具生成path不可控,于是自己开发了PathController。

封装库

为了简化动画的使用,我尝试封装了一个简单的库,包含所有常用的动画,可以用最简单的链式调用实现各种动画。下面简单地举几个例子:

(1)对比写法

传统写法:

ImageView img = (ImageView )findViewById(R.id.img);
ObjectAnimator animator = ObjectAnimator.ofFloat(sectorView, "translationY", 0, 100);
animator.setDuration(1000);
animator.setRepeatCount(1);
animator.setRepeatMode(ValueAnimator.RESTART);
animator .start();

使用库写法:

CommonAnimator.translateY(img, 0, 100)
        .duration(1000)
        .repeat(ValueAnimator.RESTART, ValueAnimator.RESTART)
        .start();

链式调用的写法是不是看起来更清爽,更简洁呢。

(2)再看个旋转动画

CommonAnimator.rotateY(img, 0, 360)
        .duration(1000)
        .repeat(ValueAnimator.INFINITE, ValueAnimator.REVERSE)
        .decelerate()
        .start();

(3)再看个同步动画

CommonAnimator.playTogether(
        CommonAnimator.translateX(img, 0, 400),
        CommonAnimator.rotateY(img, 0, 360)
).duration(1000).start();

是不是超简洁,超清晰

(4)再看个序列动画

CommonAnimator.playSequentially(
        CommonAnimator.translateX(img, 0, 400),
        CommonAnimator.rotateY(img, 0, 360)
).duration(1000).start();

(5)再来看个frame动画

CommonAnimator.animateFrame(img, animatinResId).start();

也可以单独设置图片id和时间

int[] resIdArray = getRes();
int[] times = getTimes();
CommonAnimator.animateFrame(img, resIdArray, times).start();

也可以一帧一帧添加

CommonAnimator.animateFrame(img)
    .addFrame(R.mipmap.head_image_01, 100)
    .addFrame(R.mipmap.head_image_02, 100)
    .addFrame(R.mipmap.head_image_03, 100)
    .addFrame(R.mipmap.head_image_04, 100)
    .start();

// 或者传drawable
CommonAnimator.animateFrame(img)
    .addFrame(drawable1, 100)
    .addFrame(drawable2, 100)
    .addFrame(drawable3, 100)
    .addFrame(drawable4, 100)
    .start();

(6)再来看个path动画

CommonAnimator.animatePath(img, path)
        .duration(1000)
        .start();

(7)再来看个CircularReveal

CommonAnimator.circularReveal(img, img.getWidth() / 2, img.getHeight() / 2, 0, img.getWidth() / 2)
    .decelerate()
    .start();

同时这个库也包含了之前封装的适量动画的View,使用方法参考demo。

Android高级动画(4)完结篇_第1张图片
吃瓜群众

总结

看到这里,恭喜你终于看完了。但是事实上,动画这个话题是没有尽头的,各种新的效果在不断地设计出来,我们封装再多框架也不可能一劳永逸,唯有理解了每一种动画的本质,才能以不变应万变。最后说句题外话,移动开发到这个程度如果还有人认为动画不重要,那就不可挽救了。现在的App市场竞争这么激烈,除了功能强大之外,用户体验的要求也是越来越高,如果我们的App能有一些惊艳的动画,能有一些酷炫的交互效果,那对于提升用户体验是很有帮助的。

由于个人水平有限,四篇文章中难免会有错误和不当之处,如有发现,请在评论处留言,给予指正。

你可能感兴趣的:(Android高级动画(4)完结篇)