• Android动画目前分为三种:

    1. Frame Animation 帧动画,通过顺序播放一系列图像从而产生动画效果,。图片过多时容易造成OOM(Out Of Memory内存用完)异常。
    2. Tween Animation 补间动画(又叫view动画),是通过对场景里的对象不断做图像变换(透明度、缩放、平移、旋转)从而产生动画效果,是一种渐进式动画,并且View动画支持自定义。
    3. Accribute Animation 属性动画,这也是在android3.0之后引进的动画,在手机的版本上是android4.0就可以使用这个动 画,通过动态的改变对象的属性从而达到动画效果。
  • 补间动画和属性动画的区别

补间动画只是改变了View的显示效果而已,并不会真正的改变View的属性。而属性动画可以改变View的显示效果和属性。举个例子:例如屏幕左上角有一个Button按钮,使用补间动画将其移动到右下角,此刻你去点击右下角的Button,它是绝对不会响应点击事件的,因此其作用区域依然还在左上角。只不过是补间动画将其绘制在右下角而已,而属性动画则不会。

  • 接下来就来详细了解一下这三种动画效果的用法:

FrameAnimation

帧动画是顺序播放一组预先定义好的图片,类似于电影播放,系统提供了一个类AnimationDrawable来使用帧动画,首先看一下效果演示:

1、首先在drawable里创建一个animation-list类型的xml文件,命名为frame_animation:其中oneshot是设置动画是否重复播放,设置false为确定重复播放。drawable设置不同的图片,duration设置图片的显示时间(即按每帧多少毫秒播放)。

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false"><itemandroid:drawable="@mipmap/img0"android:duration="50"/><itemandroid:drawable="@mipmap/img1"android:duration="50"/><itemandroid:drawable="@mipmap/img2"android:duration="50"/><itemandroid:drawable="@mipmap/img3"android:duration="50"/><itemandroid:drawable="@mipmap/img4"android:duration="50"/><itemandroid:drawable="@mipmap/img5"android:duration="50"/><itemandroid:drawable="@mipmap/img6"android:duration="50"/>
</animation-list>

2、设置布局文件activity_frame:定义开始播放和停止按钮和显示动画的布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/start"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="开始" /><Buttonandroid:id="@+id/stop"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="停止" /><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/view"/>
</LinearLayout>

3、在FrameActivity中实现以下代码:

/*** 帧动画*/
public class FrameActivity extends AppCompatActivity implements View.OnClickListener {private Button start;private Button stop;private ImageView view;private AnimationDrawable animationDrawable;//声明AnimationDrawable类@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_frame);initView();}private void initView() {start = findViewById(R.id.start);stop = findViewById(R.id.stop);view = findViewById(R.id.view);start.setOnClickListener(this);stop.setOnClickListener(this);// 通过逐帧动画的资源文件获得AnimationDrawable示例animationDrawable=(AnimationDrawable) getResources().getDrawable(R.drawable.frame_animation);// 把AnimationDrawable设置为ImageView的背景view.setBackgroundDrawable(animationDrawable);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.start:start();break;case R.id.stop:stop();break;}}protected void start() {if (animationDrawable != null && !animationDrawable.isRunning()) {//判断animationDrawable.start();}}protected void stop() {if (animationDrawable != null && animationDrawable.isRunning()) {animationDrawable.stop();}}
}

4、这样便可实现帧动画了,但帧动画比较容易引起OOM,所以在使用帧动画时,应尽量避免使用尺寸较大的图片。

Tween Animation

补间动画的四种变换效果对应Animation的四个子类:TranslateAnimation、ScaleAnimation、RotateAnimation、AlphaAnimation,这些动画可以通过XML来定义,也可以通过代码动态定义,以下示例通过XML定义的。

1、在res下创建一个anim文件夹,创建alpha类型xml文件用来实现动画透明度:

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:fromAlpha="1"//动画起始透明度android:toAlpha="0"//结束透明度android:duration="4000" />

2、创建scal类型xml文件用来实现缩放动画:

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:duration="4000"android:fromXScale="0"//动画开始时的x坐标的伸缩尺寸android:fromYScale="0"android:toXScale="1.5"//动画结束时x坐标上的伸缩尺寸android:toYScale="1.5"android:pivotX="50%"//表示缩放起点x坐标,可以是整数值,百分数或者小数三种样式android:pivotY="0%">
</scale>

3、创建scal类型xml文件用来实现位移动画:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:duration="4000"android:fromXDelta="0%"//动画起始时 X坐标上的位置 android:fromYDelta="100%"android:toXDelta="0%"//动画结束时 X坐标上的位置android:toYDelta="0%">
</translate>

4、创建rotate类型xml文件用来实现旋转动画:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:duration="4000"android:fromDegrees="0"//动画起始时物件的角度android:toDegrees="90"//动画结束时物件旋转的角度 可以大于360度android:pivotX="50%"//动画相对于物件的X坐标的开始位置android:pivotY="50%">
</rotate>

5、创建set类型xml文件用来实现组合动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/decelerate_interpolator"android:shareInterpolator="true" ><scaleandroid:duration="4000"android:fromXScale="0.2"android:fromYScale="0.2"android:pivotX="50%"android:pivotY="50%"android:toXScale="1.5"android:toYScale="1.5" /><rotateandroid:duration="4000"android:fromDegrees="0"android:pivotY="50%"android:pivotX="50%"android:toDegrees="360" /><translateandroid:duration="4000"android:fromXDelta="0"android:fromYDelta="0"android:toXDelta="320"android:toYDelta="0" /><alphaandroid:duration="4000"android:fromAlpha="1.0"android:toAlpha="0.1" />
</set>

6、创建布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="OnAlpha"android:text="透明度渐变AlphaAnimation" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:onClick="OnScale"android:text="缩放动画ScaleAnimation" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:onClick="OnTranslate"android:text="位移动画TranslateAnimation" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:onClick="OnRotate"android:text="旋转动画RotateAnimation" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:onClick="OnSet"android:text="组合动画SetAnimation" /><ImageViewandroid:id="@+id/tween_img"android:layout_gravity="center"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@mipmap/img"/>
</LinearLayout>

7、实现TweenActivityde中的代码

/*** Created by CXB on 2018/6/6.*/public class TweenActivity extends AppCompatActivity {private ImageView img;private Animation animation;//声明Animation类@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_tween);img = findViewById(R.id.tween_img);}/*** 透明度渐变** @param view*/public void OnAlpha(View view) {animation = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.tween_alpha);img.startAnimation(animation);}/*** 缩放渐变** @param view*/public void OnScale(View view) {animation = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.tween_scale);img.startAnimation(animation);}/*** 位移动画** @param view*/public void OnTranslate(View view) {animation = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.tween_translate);img.startAnimation(animation);}/*** 旋转动画** @param view*/public void OnRotate(View view) {animation = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.tween_rotate);img.startAnimation(animation);}/*** 组合动画** @param view*/public void OnSet(View view) {animation = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.tween_set);img.startAnimation(animation);}
}

Attribute Animation

属性动画和View动画不同,它对作用对象进行了扩展,属性动画可以对任何对象做动画,动画的效果也也得到了加强,可以实现更加绚丽的动画效果。

1、设置布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/attri_root"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="OnAlpha"android:text="透明度渐变" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="OnScale"android:text="缩放" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="OnTranslate"android:text="位移" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="OnRotate"android:text="旋转" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="OnSet"android:text="组合动画" /><Buttonandroid:id="@+id/attri_show"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="属性动画的效果显示" />
</LinearLayout>

2、实现AttributeActivity中的代码:

/*** Created by CXB on 2018/6/7.*/public class AttributeActivity extends AppCompatActivity {private Button btn_show;private ObjectAnimator objectAnimator;//声明ObjectAimator类private LinearLayout ll_root;private float rotateDu = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_attribute);btn_show = findViewById(R.id.attri_show);ll_root = findViewById(R.id.attri_root);}/*** 透明度渐变** @param view*/public void OnAlpha(View view) {objectAnimator = ObjectAnimator.ofFloat(btn_show, "alpha", 1f, 0.8f, 0.7f, 0.2f, 0.1f);//布局,类型,渐变程度objectAnimator.setDuration(4000);objectAnimator.start();}/*** 缩放** @param view*/public void OnScale(View view) {objectAnimator = ObjectAnimator.ofFloat(btn_show, "scaleY", 1f, 2f, 3f, 4f, 3f, 2f, 1f);objectAnimator.setDuration(4000);objectAnimator.start();}/*** 位移** @param view*/public void OnTranslate(View view) {float width = ll_root.getWidth();//获取当前手机的的屏幕宽高objectAnimator = ObjectAnimator.ofFloat(btn_show, "translationX", width / 10, width / 9, width / 4, width / 3, width / 2, width);objectAnimator.setDuration(4000);objectAnimator.start();}/*** 旋转** @param view*/public void OnRotate(View view) {objectAnimator = ObjectAnimator.ofFloat(btn_show, "rotation", rotateDu, 360);objectAnimator.setDuration(2000);objectAnimator.setRepeatCount(100);//设置动画重复次数objectAnimator.setRepeatMode(ValueAnimator.RESTART);//动画重复模式objectAnimator.start();}/*** 组合动画** @param view*/public void OnSet(View view) {float height = ll_root.getHeight();ObjectAnimator objectAnimatorRotate = ObjectAnimator.ofFloat(btn_show, "rotation", rotateDu, 360);ObjectAnimator objectAnimatorTr = ObjectAnimator.ofFloat(btn_show, "translationY", height, height / 2, height / 3, height / 4, height / 5, height / 6);AnimatorSet animatorSet = new AnimatorSet();animatorSet.setDuration(4000);animatorSet.play(objectAnimatorRotate).with(objectAnimatorTr);animatorSet.start();}
}

源码下载:https://download.csdn.net/download/weixin_39001306/10465643

Android开发—三种动画实现原理及使用相关推荐

  1. Android开发之三种动画

    转载:http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html http://www.lightskystreet.com/2 ...

  2. Android的三种动画详解(帧动画、View动画、属性动画)

    Android的动画分为了三种, 分别是 帧动画.View动画.属性动画. 1.帧动画 帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放. 帧动画的使用很简单, ...

  3. android图片传输三方框架,Android开发三种第三方图片加载的框架

    最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录. 现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧. 一. ...

  4. Android的三种动画

    Android动画详解 帧动画 补间动画 属性动画 帧动画   所谓帧动画其实很好理解,就是通过在一定的时间间隔内,将一组图片顺序播放出来,从而打到动画的效果,我们通过简单的帧动画例子来说明一下.   ...

  5. Android 三种动画 (帧动画 、补间动画、属性动画)

    1.帧动画 帧动画是依次展示n张静态图片,造成动画的错觉,类似看视频一样. 使用方式 在drawable目录下定义XML文件,根节点为animation-list,然后放入定义更好的图片 onesho ...

  6. android 那几种动画,Android 动画实现几种方案

    Android 动画实现几种方案 在 Android 的 FrameWork 中,为我们提供三种动画的实现方式:逐帧(Frame)动画.视图/补间动画(View Animation)和属性动画(Pro ...

  7. Android的三种网络联接方式(URL / HttpURLConnection | HttpClient | InetAddress )

    Android SDK 中一些与网络有关的package,如下: 包描述 java.net 提供与联网有关的类,包括流和数据包(datagram)sockets.Internet 协议和常见 HTTP ...

  8. 19.React Native动画Animated效果三种动画类型二;

    目录 1.介绍 2.Animated.decay() 2.1方法 2.1.1value参数值 2.1.2config参数有以下这些属性: 2.2示例-执行缩放 2.2.1初始化缩放值 2.2.2绑定缩 ...

  9. android动画背景,Android开发之背景动画简单实现方法

    在Android开发中,我们都会接到项目的业务需求,实现应用程序背景动画的效果,接下来,爱站技术频道小编带给大家的Android开发之背景动画简单实现方法. 1.先创建动画层,有三张图片 androi ...

最新文章

  1. AI 应届生就业意向大搜查,哪家企业才是大家的心仪首选?
  2. FileStream 的FileShare一点小认识
  3. net-tools 要被 iproute2 取代了
  4. js原理之执行上下文
  5. C++网络游戏程序员笔试题
  6. flowable设计器节点属性扩展_Flowable-流程定义扩展属性
  7. java classes.jar_classes.jar
  8. php word转pdf linux,Linux平台中使用PHP把word转pdf的实现方法
  9. 判断 iframe 是否加载完成的完美方法
  10. 未来十年,Java 仍会是最受欢迎的编程语言吗?
  11. php文件夹下所有视频播放,PHP使用glob方法遍历文件夹下所有文件
  12. delegate和protocol
  13. python如何生成一系列浮点数(含例子)
  14. Kotlin学习总结(1)——Kotlin快速入门
  15. php inqude函数,Python匿名函数(lambda函数)
  16. python random random_【python】random与numpy.random
  17. dct变换编码研究课设实验报告_信息隐藏实验3
  18. 交互式甘特图控件VARCHART XGantt教程:如何打印和导出图表(.NET版)
  19. Coherence缓存学习
  20. 2020 3月 月末总结(一个月的面试收获了什么)

热门文章

  1. 格调高又小众的EPUB 阅读器(转载)
  2. Win11任务栏修改方法(更新中)
  3. Java学习笔记类对象多态继承(下)
  4. HDU - 6606
  5. 北邮硕士、前百度工程师:能进大厂,就不用读研究生了!
  6. hypothesisTest
  7. Jqurey总结归纳
  8. 《“爱”是如此的容易...》
  9. 关于数据库的递归查询
  10. android 画图