基础知识

谈起 Android动画,我们就得讲讲他的分类:从大的方向来说主要分为两类:View动画(视图动画)和 属性动画。其中 View动画又包括 补间动画 和 帧动画。其中,补间动画 使用广泛,下面我们一起来看看如何实现其动画效果。

补间动画:说白了就是涵盖了 平移、缩放、旋转 和 透明度四种变化的动画。实现方式有两种:xml文件 和 java代码

平移

效果展示

xml 方式

使用步骤:

1、res 下 创建 anim 文件夹,并创建 xxx.xml 文件

注意:让你创建 anim 名字的文件夹,你就别不信邪搞别的名字。

<?xml version="1.0" encoding="utf-8"?>
<!--set 表示动画集合,可放各个动画组合,同时设置时间、最后的位置等属性-->
<set xmlns:android="http://schemas.android.com/apk/res/android"android:duration="3000" android:fillAfter="true">
<!-- translate    平移动画--><!--        50%p 表示 相对于父控件宽高--><translate xmlns:android="http://schemas.android.com/apk/res/android"android:fromXDelta="0%p" android:toXDelta="50%p" android:fromYDelta="0%p" android:toYDelta="50%p"></translate>
</set>

2、代码调用

package com.wust.myanimation;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private TextView tv_hello_world;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取控件tv_hello_world = findViewById(R.id.tv_hello_world);//利用 AnimationUtils 这个工具类获取 AnimationAnimation translate = AnimationUtils.loadAnimation(this, R.anim.translate);//因为这一步我们在 xml 中做了申明,所以这里不需要写,但是要记住,Duration 不设置你将会看不到动画
//        translate.setDuration(3000);//开始动画tv_hello_world.startAnimation(translate);}
}

代码方式

使用步骤:

  1. 编写java代码
package com.wust.myanimation;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.TranslateAnimation;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private TextView tv_hello_world;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取控件tv_hello_world = findViewById(R.id.tv_hello_world);//利用 AnimationUtils 这个工具类获取 Animation Animation.RELATIVE_TO_PARENT:表示后面的值相对于父控件Animation translate = new TranslateAnimation(Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_PARENT,0.5f,Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_PARENT,0.5f);//设置运动完了之后是否回来translate.setFillAfter(true);//这一步不能忘记了translate.setDuration(3000);//开始动画tv_hello_world.startAnimation(translate);}
}

缩放

效果展示

xml 方式

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true" android:duration="3000"><scale android:fromXScale="0%" android:toXScale="100%" android:fromYScale="0%" android:toYScale="100%"/>
</set>
package com.wust.myanimation;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.TranslateAnimation;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private TextView tv_hello_world;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取控件tv_hello_world = findViewById(R.id.tv_hello_world);//利用 AnimationUtils 这个工具类获取 Animation Animation.RELATIVE_TO_PARENT:表示后面的值相对于父控件Animation scale = AnimationUtils.loadAnimation(this,R.anim.scale);//开始动画tv_hello_world.startAnimation(scale);}
}

java代码方式

package com.wust.myanimation;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private TextView tv_hello_world;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取控件tv_hello_world = findViewById(R.id.tv_hello_world);//利用 AnimationUtils 这个工具类获取 Animation Animation.RELATIVE_TO_SELF:表示后面的值相对于自己 这里的值大小都是 [0,1]Animation scale = new ScaleAnimation(0,1,0,1,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);//设置运动完了之后是否回来scale.setFillAfter(true);//这一步不能忘记了scale.setDuration(3000);//开始动画tv_hello_world.startAnimation(scale);}
}

旋转 和 透明度大家根据上面两种方式的规律自行尝试,我们抓紧篇幅赶紧来讲讲如何将这四种动画集合在一起展示。

综合动画

效果展示

xml方式

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000" android:fillAfter="true"><translate android:fromXDelta="0%p"  android:toXDelta="50%p" android:fromYDelta="0%p" android:toYDelta="50%p"/><scale android:pivotX="0%" android:pivotY="0%" android:fromXScale="0%" android:toXScale="100%" android:fromYScale="0%" android:toYScale="100%"/><alpha android:fromAlpha="0" android:toAlpha="1"/><rotate android:pivotY="0%" android:pivotX="0%" android:fromDegrees="0" android:toDegrees="18"/>
</set>
package com.wust.myanimation;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private TextView tv_hello_world;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取控件tv_hello_world = findViewById(R.id.tv_hello_world);//利用 AnimationUtils 这个工具类获取 Animation Animation.RELATIVE_TO_SELF:表示后面的值相对于自己 这里的值大小都是 [0,1]Animation scale = AnimationUtils.loadAnimation(this,R.anim.multianim);//开始动画tv_hello_world.startAnimation(scale);}
}

java代码方式

package com.wust.myanimation;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.view.animation.BounceInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private TextView tv_hello_world;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取控件tv_hello_world = findViewById(R.id.tv_hello_world);//利用 AnimationUtils 这个工具类获取 Animation Animation.RELATIVE_TO_SELF:表示后面的值相对于自己 这里的值大小都是 [0,1]Animation translate = new TranslateAnimation(Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_PARENT,0.5f,Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_PARENT,0.5f);Animation scale = new ScaleAnimation(0,1,0,1,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);Animation alpha = new AlphaAnimation(0, 1);Animation rotate = new RotateAnimation(0, 18,Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);//创建 AnimationSet 装 AnimationAnimationSet animationSet = new AnimationSet(false);animationSet.addAnimation(translate);animationSet.addAnimation(scale);animationSet.addAnimation(alpha);animationSet.addAnimation(rotate);animationSet.setFillAfter(true);animationSet.setDuration(3000);//开始动画tv_hello_world.startAnimation(animationSet);}
}

动画监听

animation.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {//动画开始时调用}@Overridepublic void onAnimationEnd(Animation animation) {//动画结束时调用}@Overridepublic void onAnimationRepeat(Animation animation) {//动画重复时调用}
});

总结

在 java 代码中,我们主要用到了如下几个类: Animation  |||  TranslateAnimation、ScaleAnimation、RotateAnimation、 AlphaAnimation  ||| AnimationSet 。

从颜色中可以看到,总的分为三类:Animation 是父亲级别,TranslateAnimation、ScaleAnimation、RotateAnimation、 AlphaAnimation 继承自 Animation,表示具体动画,

AnimationSet 继承自 Animation,表示动画集合。

View动画 ---- 朴间动画 的应用场景:

  • 标准的动画效果:平移、旋转、缩放和透明度
  • 特殊的应用场景:
  1. Activity切换效果
  2. Fragment切换效果
  3. 视图组 (ViewGroup)中子元素的出场效果

Android动画的使用——补间动画相关推荐

  1. Android中四种补间动画的使用示例(附代码下载)

    场景 Android中四种补间动画. 透明度渐变动画 旋转动画 缩放动画 平移动画 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的 ...

  2. Android动画学习记录一(Android动画种类、补间动画和帧动画)

    Android动画学习记录一(动画种类.补间动画和帧动画) 动画种类.补间动画和帧动画 Android动画学习记录一(动画种类.补间动画和帧动画) 一.动画种类 二.View动画 2.1 补间动画 补 ...

  3. 形状补间动画和动作补间动画区别一览表

    形状补间动画和动作补间动画区别一览表 项目 形状补间动画 动作补间动画 概念 在一个关键帧中绘制一个形状,然后在另外一个关键帧更改或绘制另一个形状,FLASH据二者间形状创建的动画 在一个关键帧中设置 ...

  4. Android动画学习之补间动画

    补间动画简介 补间动画指的是做FLASH动画时,在两个关键帧中间需要做"补间动画",才能实现图画的运动:插入补间动画后两个关键帧之间的插补帧是由计算机自动运算而得到的. 补间动画分 ...

  5. Android动画学习之补间动画和逐帧动画,移动互联网app开发

    | fromXScale | 指定动画开始时X轴上的缩放系数 | 值为1.0表示不再变化 | | fromYScale | 指定动画开始时Y轴上的缩放系数 | 值为1.0表示不再变化 | | toXS ...

  6. Android实现蝴蝶动画,蝴蝶飞舞- (补间动画+逐帧动画)

    AnimationDrawable animationDrawable; //逐帧动画 //移动蝴蝶位置的定时器 Timer tmrTranslate; TimerTask timerTask; Im ...

  7. Android动画之帧动画和补间动画

    Android系统提供三种动画:帧动画.补间动画和属性动画.这里先分析总结帧动画和补间动画. FrameAnimation 帧动画,通俗来说就是按照图片动作顺序依次播放来形成动画,创建帧动画可以用 x ...

  8. 每日一道面试题(第7期)---Android补间动画与属性动画的区别

    零零碎碎的东西总是记不长久,仅仅学习别人的文章也只是他人咀嚼后留下的残渣.无意中发现了这个每日一道面试题,想了想如果只是简单地去思考,那么不仅会收效甚微,甚至难一点的题目自己可能都懒得去想,坚持不下来 ...

  9. Android之帧动画与补间动画的使用

    前言 在日常开发中,我们有时候需要一些好看的动画效果,这时可以充分利用Android提供的这几种动画来实现, Android提供了3种类型的动画: 补间动画:补间动画可以应用于View,让你可以定义一 ...

  10. Android学习—补间动画(渐变动画)

    使用xml的方式设置动画属性 1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:an ...

最新文章

  1. 2022-2028年中国激光脱毛仪行业市场调查研究报告
  2. Eclipse远程调试HDP源代码
  3. Oracle入门(九)之用户、角色与权限之间关系
  4. python函数可以提高运行效率吗_python 多进程如何提高函数效率?
  5. python 自动下载 voa MP3
  6. spring data elasticsearch 对应 elasticsearch 版本
  7. 目不给视的拼音及解释
  8. 线性代数之——正交矩阵和 Gram-Schmidt 正交化
  9. SQLAlchemy基本使用
  10. 数据结构与算法学习笔记
  11. ps知识的教学 day01
  12. (Oracle)零基础学习SQL语句--第1篇
  13. 计算机信息管理调查报告模板,精选市场调查报告模板锦集九篇
  14. thinkphp6自定义日志驱动,增加显示全部请求信息
  15. 接口耗时优化与cpu飙高解决
  16. win10网络适配器不见了_Win10网络适配器消失不见了怎么办?,爱纯净官网
  17. 执念斩长河入CSDN的第一篇日志
  18. php面试自我介绍结束语,面试自我介绍的结束语
  19. 让你的爱宠不止于你的爱--宠物领养(寄养)系统
  20. 熊工巧匠 | 绘制高颜值的电路接线图,让你的创客项目赢在起跑线上

热门文章

  1. ITIL 4Foundation认证
  2. 2014年9月CCF软考试题
  3. 电脑没有使用计算机进入睡眠状态,电脑打不开,屏上显示:无视频输入,进入睡眠模式。怎么处理...
  4. github的crx快速下载
  5. Android仿微信语音聊天界面
  6. 【jQwidgets】简单封装示例
  7. 中国现在小学要求计算机课吗,为什么说刚进学校不要买电脑?是用不到吗?
  8. IT项目量化管理结构图
  9. C语言量化管理系统,任务量化管理系统
  10. 新浪微博技术架构分析-转载