栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android动画全总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android动画全总结

我总结了一图,清晰明了,
再配合https://www.runoob.com/w3cnote/android-tutorial-animation.html以及后续的4个章节学习即可:

这边记录几个我的理解。

名词解释

这里很重要,理解了这里就懂了一半。另外一半就是看看xml代码和java代码的使用。
首先名词,看各种攻略十分混乱。
这里我已经总结了。

  • 帧动画,Frame动画,但是关键的是,他是drawable子类;
  • 补间动画,Tween动画,View动画,指的其实是Animation的用法,常见的就是xml中的,诸如此类;即AnimationUtils.loadAnimation, 然后startAnimation;
  • 属性动画,property动画,其实指的是Animator。

这3个黑体,就十分好理解了:
drawable就像我们普通使用图片一样;
Animation是动画,实实在在的片子,动作小卡片类似的意思;
Animator是动画师的意思,从这个角度来理解,它是操控者,用于操控对象的属性达成动画的目的。而Animation则更像是一些变幻而已。

Animation:
startAnimation->invaidate->drawCanvas -> applyLegacyAnimation对view本身,通过操作parent对于自身的渲染位置来实现而属性动画。
Animator:
将会真实操控的是setScale,setAlpha,setRotateX,RenderNode里面的View property的真实属性。

补充

帧动画:

    
	    
	   
	  
	  
	    
	
 

View动画:



    
    
    
    

上述两类动画,在大图中,都有java相关操作的代码。自行查看。不过还是推荐查看链接处,比较详尽。这里只做备注。

Animator:
ValueAnimator:
其实是一个与动画无关的东西。本质是一个提供数学支持的类。你给他一些druation,数值,interpolator,并给他他回调你进度,你自行去操控你要变化的View、对象。先创建ValueAnimator对象,调用ValueAnimator.ofInt/ofFloat 获得,然后设置动画持续时间,addUpdateListener添加AnimatorUpdateListener事件监听, 然后使用参数animation的getAnimatedValue()获得当前的值,然后我们可以拿着这个值 来修改View的一些属性,从而形成所谓的动画效果,接着设置setInterpolator动画渲染模式, 最后调用start()开始动画的播放。

ObjectAnimator:
ObjectAnimator.ofFloat(textview, “alpha”, 1f, 0f);寻找传输的属性名对应的get和set方法~,而非找这个属性值!这个是一般用的比较多,我们用来操控控件或者其他对象更加方便。
其他的,与ValueAnimator类似,毕竟是他的子类。

AnimatorSet:
用于整合多个动画使用。
animSet = new AnimatorSet();
animSet.play(animator4).with(animator3).with(animator2).after(animator1);
animSet.setDuration(5000l);
animSet.start();
相信大家用的时候,自行百度谷歌下,相关的方法不难。

更加进阶的是Interpolator。Evaluator。这里就略过了。

结合实践

到了这里,结合我最近的需求。一张图,我又想它拉伸,又想让他位移,然后透明消失。
UI设计师,想让我们用帧动画,实在是太费空间和内存了。拒绝了。
还是一张图打天下吧。
我们首先可以使用传统的xml的,组合一下3种animation的方式,看看3个一起,统一调度,能否达到一个比较好的状态。
如果不理想,改用Animator,通过with,after,并且单独设置不同的Interpolator来控制变化曲线,组合出一个更好的效果。
后续补充我的实战结果吧。

    private ObjectAnimator animTranslate;
    private ObjectAnimator animAlpha;
    private ObjectAnimator animScale;

    void init(CircleImageView imageView) {
        animTranslate = ObjectAnimator.ofFloat(imageView, "translationX", 0, -60);
        animTranslate.setInterpolator(new AccelerateDecelerateInterpolator());
        animAlpha = ObjectAnimator.ofFloat(imageView, "alpha", 1f, 0f);
        animScale = ObjectAnimator.ofFloat(imageView, "scaleY", 1f, 0.8f);
    }

    void start() {
        AnimatorSet animSet = new AnimatorSet();
        animSet.play(animTranslate).with(animAlpha).with(animScale);
        animSet.setDuration(3000L);
        animSet.start();
    }


不得不感叹,google工程师,真是大道至简,android3.0加入的属性动画,ObjectAnimator粗暴,简单,好用,组合也容易。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/865031.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号