IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Android动画全总结 -> 正文阅读

[游戏开发]Android动画全总结

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

这边记录几个我的理解。

名词解释

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

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

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

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

补充

帧动画:

<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android"    android:oneshot="false">    
	<item android:drawable="@drawable/draw1" android:duration="200"/>    
	<item android:drawable="@drawable/draw2" android:duration="200"/>   
	<item android:drawable="@drawable/draw3" android:duration="200"/>  
	<item android:drawable="@drawable/draw4" android:duration="200"/>  
	<item android:drawable="@drawable/draw5" android:duration="200"/>    
	<item android:drawable="@drawable/draw6" android:duration="200"/>
 </animation-list>

View动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fillAfter="true"
    android:fillBefore="true"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:repeatMode="reverse"
    android:shareInterpolator="true"
    android:startOffset="100">
    <translate
        android:fromXDelta="0.0"
        android:fromYDelta="0.0"
        android:repeatCount="-1"
        android:toXDelta="200.0"
        android:toYDelta="100.0" />
    <rotate
        android:fromDegrees="0"
        android:pivotX="100"
        android:pivotY="-50"
        android:repeatCount="-1"
        android:toDegrees="-180" />
    <scale
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="0"
        android:pivotY="0"
        android:repeatCount="-1"
        android:toXScale="2.0"
        android:toYScale="2.0" />
    <alpha
        android:fromAlpha="1.0"
        android:repeatCount="-1"
        android:toAlpha="0.0" />
</set>

上述两类动画,在大图中,都有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的<set>,组合一下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粗暴,简单,好用,组合也容易。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 13:05:27  更:2022-05-09 13:05:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 11:36:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码