Android炫酷之动画简记

前言

国内的Android大部分应用不重视页面的简洁,而且业务逻辑是越攒越多,最终成为一个庞然大物,这个趋势必然不会在意界面的炫酷,但是今天我浅记一下炫酷之动画,Android自3.0以前只有逐帧动画和补间动画,在3.0以后新增了ObjectAnimator(属性动画),在5.0以后又新增了一系列好看的MD风格动画,当然期间不缺乏一些好用的非官方动画框架譬如nineoldandroids,但是由于接下来的出场率不高暂且不谈,接下来我们当简谈下列举的动画,在开谈前还得郑重的提醒句,代码中动态创建的动画一定要注意退出,否则动画所造成的内存泄漏比Bitmap还can忍,它貌似会持续增高。
工具:AS 2.3.1 编译版本:api 25 构建版本:gradle2.3.1


  • 逐帧动画(Frame Animation)
  • 补间动画(Tween Animation)
  • 属性动画(Property Animation ) 3.0后新增
  • MateriaDesign
    1.Touch feedback(触摸反馈)
    2.Reveal effect(揭露效果)
    3.Activity transitions(转场动画实在有很多,最出名的莫属共享元素)
    4.Curved motion(曲线运动)
    5.View state changes (视图状态改变)
    6.Animate Vector Drawables(可绘矢量动画)
  • Lottie(多端支持的未来方向动画)
逐帧动画(Frame Animation)

逐帧动画其实学过Flash的同学绝对不陌生,我们对每一帧设置一个动作,然后连贯的播放起来,这里在Android也是可以这么理解的,做法很简单,平时我们只需要找美工要一个动作的几张分解图,然后XXX就好了,下面来一发例子。


Android炫酷之动画简记_第1张图片
gif5新文件.gif

首先呢我们就先找一些图片这种东西不是稀缺货,就像下面这个,共有12张。


Android炫酷之动画简记_第2张图片
逐帧动画图片.png

代码怎么写呢?
第一步:我们在xml静态文件中配置这些东西,下面的注释很重要、很重要、很重要我说三遍。


    
    
    
    
    
    
    
    
    
    
    
    
    

第二步:既然是动画就需要动那就那啥。。。需要播放出来,我实际操作在onCreate周期方法中

ImageView imgView = (ImageView) findViewById(R.id.img);
AnimationDrawable animDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.frame_animation);
animDrawable.setOneShot(false);
imgView.setBackground(animDrawable);
 animDrawable.start();

这里需要注意的就是有博客说此处可能会遇到一个bug,就是控件只显示第一帧,据说是Window对象未初始化完成,无法添加动画载体控件的对象所致,这我无法辨别真假,暂且相信为一个低概率事件,出现时就把我上面操作动画的代码放到onWindowFocusChanged系统方法里面吧,反正我是遇到只显示第一帧,不过只是因为没有animDrawable.start();这里还得鄙视一下那些没有在onDestroy或者在onPuse等周期方法中销毁动画的人,始乱终弃,动画所造成的内存泄漏是你承担不起的,不起的,起的,嘀嘀嘀嘀嘀嘀嘀。

if(animDrawable.isRunning()){
            animDrawable.stop();
        }
水波纹(触摸反馈)

参考例子别忘了这个http://blog.csdn.net/u012209506/article/details/72833936

共享元素动画 http://blog.sina.com.cn/s/blog_7452896e0102vdko.html(可做参考写)

共享元素这个东西真的很炫酷,这里不做详细探究,只记用法

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(MailDetailsActivity.this, view, "look");
                startActivity(intent,options.toBundle());

目标控件加上android:transitionName="look"即可完成转场动画
2者不可缺一

未完,待补充...

你可能感兴趣的:(Android炫酷之动画简记)