我的编程空间,编程开发者的网络收藏夹
学习永远不晚

android 帧动画,补间动画,属性动画的简单总结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

android 帧动画,补间动画,属性动画的简单总结

帧动画——FrameAnimation

将一系列图片有序播放,形成动画的效果。其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用

在Drawable文件夹下,创建animation-list为根节点的资源文件


<animation-list android:oneshot="false">
 <item android:drawable="@drawable/img1" android:duration="100"/>
 <item android:drawable="@drawable/img2" android:duration="100"/>
 <item android:drawable="@drawable/img3" android:duration="100"/>
 <item android:drawable="@drawable/img4" android:duration="100"/>
</animation-list>

oneshot:是否只播放一次     

drawable:一帧引用的图片

duration:一帧播放的时间

播放动画

将动画作为控件的背景

((AnimationDrawable)view.getBackground()).start();

Animation常用属性

duration:动画时间                  

repeatCount:重复次数 infinite无限次

fillAfter:是否停止在最后一帧

repeatMode:重复模式     值:restart重新开始,reserve反复

startOffset:开始延迟时间

补间动画 Tween Animation

只能应用于View对象,只支持部分属性,View animation值改变了View绘制的位置,并没有改变对象本身的真实位置

可以使用XML定义也可以使用代码定义     XML定义的动画放在/res/anim/文件夹内

开始动画 通过view的startAnimation(Animation a)  参数定义的动画

四种补间动画通过XML定义

AlphaAnimation:透明度动画


<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
 android:fromAlpha="0"
 android:toAlpha="1"
 android:duration="2000">
 <!--
 fromAlpha 起始透明度 0为完全透明 1为不透明 0~1之间的浮点值
 toAlpha 结束透明度
 duration 动画运行时间 单位毫秒
 -->
</alpha>

AlphaAnimation alphaAnimation=null;
 //加载XML中的动画XML文件
 alphaAnimation= (AlphaAnimation) AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_alpha);
 //常用属性设置 各种动画通用
 alphaAnimation.setRepeatCount(3);//执行动画效果结束后重复执行3次 一共4次
 alphaAnimation.setRepeatMode(Animation.REVERSE);//重复模式
 //动画结束是否停止在最后一帧
 alphaAnimation.setFillAfter(true);
 //动画结束是否停止在第一帧
 alphaAnimation.setFillBefore(false);
 //设置插值器 动画执行速度 变速 加减速。。
 //AccelerateInterpolator减速
 //DecelerateInterpolator加速
 alphaAnimation.setInterpolator(new AccelerateDecelerateInterpolator());

ScaleAnimation:缩放动画

代码加载的方式和方法的使用与AlphaAnimation一样


<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
 android:toXScale="1"
 android:toYScale="1"
 android:fromXScale="0.1"
 android:fromYScale="0.1"
 android:pivotY="0%"
 android:pivotX="0%"
 android:duration="2000">
 <!--
  浮点值 表示倍数 自身几倍
  fromXScale 动画在X轴以自身几倍伸缩开始
  toXScale 动画在X轴以自身几倍伸缩结束
  fromYScale 动画在Y轴以自身几倍伸缩开始
  toYScale 动画在Y轴以自身几倍伸缩结束
  pivotX 动画相对于控件自身的X坐标的开始位置
  pivotY 动画相对于控件自身的Y坐标的开始位置
  0% 0% 表示控件左上角 为0,0原点坐标
 -->
</scale>

TranslateAnimation:平移动画


<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
 android:fromXDelta="-100%p"
 android:fromYDelta="0"
 android:toXDelta="100%p"
 android:toYDelta="0"
 android:duration="2000">
 <!--
  fromXDelta x轴起始位置
  toXDelta X轴结束位置
  fromYDelta y轴起始位置
  toYDelta y轴结束位置
  100%p 表示相对于父级
  100%相对于自身
-->
</translate>

RotateAnimation:旋转动画


<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
 android:fromDegrees="0"
 android:toDegrees="360"
 android:duration="2000"
 android:pivotX="50%"
 android:pivotY="50%"
android:interpolator="@android:anim/accelerate_decelerate_interpolator">
 <!--
 interpolator 指定动画的插值器
 accelerate_decelerate_interpolator 加速-减速
 accelerate_interpolator  加速
 decelerate_interpolator  减速
 fromDegrees 动画起始角度
 toDegrees 动画结束旋转的角度 可以大于360度
 负数表示逆时针旋转 正数表示顺时针旋转
 pivotX相对于view的X坐标的开始位置
 pivotY相对于view的Y坐标的开始位置
绝对尺寸 100px
 50% 相对尺寸 相对于自身的50%
 50%p 相对尺寸 相对于父容器的50%
 50%为物件的X或Y方向坐标上的中点位置
 duration 动画播放时间 单位毫秒
-->
</rotate>

通过构造方法创建 

构造参数详解  此段内容选自 http://www.cnblogs.com/aimeng/archive/2011/10/10/2206710.html 


//在代码中定义 动画实例对象
private Animation myAnimation_Alpha;
private Animation myAnimation_Scale;
private Animation myAnimation_Translate;
private Animation myAnimation_Rotate;
 //根据各自的构造方法来初始化一个实例对象
myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
  Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
  Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);

AlphaAnimation


AnimationAlphaAnimation(float fromAlpha, float toAlpha)
//第一个参数fromAlpha为 动画开始时候透明度
//第二个参数toAlpha为 动画结束时候透明度
myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
//说明:
//  0.0表示完全透明
//  1.0表示完全不透明
myAnimation_Alpha.setDuration(5000);
//设置时间持续时间为 5000毫秒

ScaleAnimation


ScaleAnimation(float fromX, float toX, float fromY, float toY,
   int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) 
 //第一个参数fromX为动画起始时 X坐标上的伸缩尺寸 
 //第二个参数toX为动画结束时 X坐标上的伸缩尺寸 
 //第三个参数fromY为动画起始时Y坐标上的伸缩尺寸 
 //第四个参数toY为动画结束时Y坐标上的伸缩尺寸 
 
 //第五个参数pivotXType为动画在X轴相对于物件位置类型 
 //第六个参数pivotXValue为动画相对于物件的X坐标的开始位置
 //第七个参数pivotXType为动画在Y轴相对于物件位置类型 
 //第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置
 myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
   Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
 myAnimation_Scale.setDuration(700);
 //设置时间持续时间为 700毫秒

TranslateAnimation


TranslateAnimation(float fromXDelta, float toXDelta,
    float fromYDelta, float toYDelta) 
 //第一个参数fromXDelta为动画起始时 X坐标上的移动位置 
 //第二个参数toXDelta为动画结束时 X坐标上的移动位置 
 //第三个参数fromYDelta为动画起始时Y坐标上的移动位置 
 //第四个参数toYDelta为动画结束时Y坐标上的移动位置 

RotateAnimation


RotateAnimation(float fromDegrees, float toDegrees, 
   int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
 //第一个参数fromDegrees为动画起始时的旋转角度 
 //第二个参数toDegrees为动画旋转到的角度 
 //第三个参数pivotXType为动画在X轴相对于物件位置类型 
 //第四个参数pivotXValue为动画相对于物件的X坐标的开始位置
 //第五个参数pivotXType为动画在Y轴相对于物件位置类型 
 //第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置
 myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);

属性动画

相对补间动画  属性动画会真正的使目标对象的属性值发生改变,不像补间动画只是影像的改变    只能修改具有get/set方法的属性值

因为可以修改对象的属性,属性动画可以做到更多的效果,改变文本大小,背景颜色等等

属性动画创建在 res/animator

ValueAnimator

包含属性动画的所有核心功能,动画时间,开始、结束属性值,属性值计算方法等。

ValuAnimiator设置开始结束值 实现ValueAnimator.onUpdateListener接口,

这个接口只有一个函数onAnimationUpdate(),在这个函数中会传入ValueAnimator对象做为参数,通过这个ValueAnimator对象的getAnimatedValue()函数可以得到当前的属性值

把属性值设置给某个控件的某个属性

使用xml


<?xml version="1.0" encoding="utf-8"?>
<animator xmlns:android="http://schemas.android.com/apk/res/android"
 android:duration="1000"
 android:valueFrom="0"
 android:valueTo="300"
 android:valueType="intType"
android:interpolator="@android:interpolator/overshoot">
 <!--
 valueFrom 起始值
 valueTo 结束值
 valueType 值的类型
 intType整数值、floatType浮点值、colorType颜色值
 interpolator插值器
 -->
</animator>

ValueAnimator valueAnimator=null;
 //通过AnimatorInflater.loadAnimator()加载xml 创建ValueAnimator
 valueAnimator= (ValueAnimator) AnimatorInflater.loadAnimator(this,R.animator.animator_value);
 //动画执行时间
 valueAnimator.setDuration(3000);
 //值改变监听
 valueAnimator.addUpdateListener(listener);
 //开始动画
 valueAnimator.start();

private ValueAnimator.AnimatorUpdateListener listener=new ValueAnimator.AnimatorUpdateListener() {
 @Override
 public void onAnimationUpdate(ValueAnimator animation) {
       //获取值
  int value= (int) animation.getAnimatedValue();
       //btnValueAnimator为测试控件
        //设置控件X轴平移
        btnValueAnimator.setTranslationX(value);
 }
 };

使用代码



 //代码创建 ValueAnimator类自身的方法
 //ofFloat值类型float
 ValueAnimator valueAnimator=ValueAnimator.ofFloat(0,1);
 //ofInt值类型int 从0~300
 valueAnimator=ValueAnimator.ofInt(0,300);
 //也可以用来设置颜色 在颜色改变过程中会将颜色变化情况显示出来
 //红色到蓝色的改变过程 显示N种颜色
 valueAnimator=ValueAnimator.ofInt(Color.RED,Color.BLUE);
 //ofArgb设置颜色 如果无法使用 是的sdk版本低了
 //这个方法改变颜色过程中只显示红色和蓝色
 //valueAnimator=ValueAnimator.ofArgb(Color.RED,Color.BLUE);
 //设置插值器
 valueAnimator.setInterpolator(new CycleInterpolator());
 
 //设置动画属性 参数1:名字 参数2,3值的变化区间
 PropertyValuesHolder alphaHolder=PropertyValuesHolder.ofFloat("alpha",0f,1f);
 PropertyValuesHolder widthHolder=PropertyValuesHolder.ofInt("width",0,300);
 //ValueAnimator.ofPropertyValuesHolder 添加holder 创建动画
valueAnimator=ValueAnimator.ofPropertyValuesHolder(alphaHolder,widthHolder);
 //动画执行时间
 valueAnimator.setDuration(3000);
 //值改变监听
 valueAnimator.addUpdateListener(listener);

private ValueAnimator.AnimatorUpdateListener listener=new ValueAnimator.AnimatorUpdateListener() {
 @Override
 public void onAnimationUpdate(ValueAnimator animation) {
  
//  int value= (int) animation.getAnimatedValue();
//  btnValueAnimator.setTranslationX(value);横坐标平移
//  float value= (float) valueAnimator.getAnimatedValue();
//  btnValueAnimator.setAlpha(value);透明度改变
//  int value= (int) animation.getAnimatedValue();
//  btnValueAnimator.setTextColor(value);文字颜色改变
  
  float alpha= (float) valueAnimator.getAnimatedValue("alpha");
  int width= (int) valueAnimator.getAnimatedValue("width");
  btnValueAnimator.setAlpha(alpha);//改变透明度
  //图像绘制 左边不变从右边慢慢增加
  //修改控件的width height不能使用setWidth或setHeight
  btnValueAnimator.setRight(width);
  //btnValueAnimator.setBottom(width);
 }
 };

ObjectAnimator:

继承自ValueAnimator,要指定一个对象及该对象的一个属性,当属性值计算完成时自动设置为该对象的相应属性,不需要设置监听,底层自动完成,一般会用ObjectAnimator来改变某一对象的某一属性


//用来测试的button
 Button btnObjectAnimator= (Button) findViewById(R.id.btn_object_animator);
 //加载动画
 ObjectAnimator objectAnimator= (ObjectAnimator) AnimatorInflater.loadAnimator(this,R.animator.animator_object);
 //绑定控件
 objectAnimator.setTarget(btnObjectAnimator);
 //参数1 绑定控件 参数2 设置 属性 参数3 设置值
 objectAnimator=ObjectAnimator.ofInt(btnObjectAnimator,"textColor",Color.RED);
 //PropertyValuesHolder设置多个属性
 PropertyValuesHolder translationXHolder=PropertyValuesHolder.ofFloat("translationX",0,300);
 PropertyValuesHolder translationYHolder=PropertyValuesHolder.ofFloat("translationY",0,200);
objectAnimator=ObjectAnimator.ofPropertyValuesHolder(btnObjectAnimator,translationXHolder,translationYHolder);
 objectAnimator.setDuration(3000);
     //开始动画
     objectAnimator.start();
您可能感兴趣的文章:Android补间动画基本使用(位移、缩放、旋转、透明)Android旋转、平移、缩放和透明度渐变的补间动画Android控件Tween动画(补间动画)实现方法示例Android帧动画、补间动画、属性动画用法详解Android动画之补间动画(Tween Animation)基础学习Android动画之补间动画(Tween Animation)实例详解Android动画学习笔记之补间动画


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

android 帧动画,补间动画,属性动画的简单总结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

android 帧动画,补间动画,属性动画的简单总结

帧动画——FrameAnimation 将一系列图片有序播放,形成动画的效果。其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用 在Drawable文件夹下,创建animation-list为根节点的资源文件
2022-06-06

Android帧动画、补间动画、属性动画用法详解

在安卓开发中,经常会使用到一些动画,那么在开发中,如何使用这些动画呢? 帧动画:不是针对View做出一些形状上的变化,而是用于播放一张张的图片,例如一些开机动画,类似于电影播放,使用的是AnimationDrawable来播放帧动画 res
2022-06-06

Android 动画(View动画,帧动画,属性动画)详细介绍

0. 前言 Android动画是面试的时候经常被问到的话题。我们都知道Android动画分为三类:View动画、帧动画和属性动画。先对这三种动画做一个概述:View动画是一种渐进式动画,通过图像的平移、缩放、旋转和透明度等各种渐进式变换完
2022-06-06

Android补间动画的实现示例

本文主要介绍了Android补间动画的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-17

Android结合xml实现帧动画的方法

这篇文章将为大家详细讲解有关Android结合xml实现帧动画的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1 创建 xml 动画文件在 Android 项目工程中的 drawable 目录下创建动
2023-06-15

Android编程之简单逐帧动画Frame的实现方法

本文实例讲述了Android编程之简单逐帧动画Frame的实现方法。分享给大家供大家参考,具体如下: 1、逐帧动画 即是通过播放预先排序好的图片来实现动态的画面,感觉像是放电影。 2、实现步骤: ① 在工程里面导入要播放的图片。此简单例子中
2022-06-06

Android开发简单实现摇动动画的方法

本文实例讲述了Android开发简单实现摇动动画的方法。分享给大家供大家参考,具体如下:1、先创建shake.xml2023-05-30

Android简单实现启动画面的方法

本文实例讲述了Android简单实现启动画面的方法。分享给大家供大家参考,具体如下: 核心代码:package com.demo.app; import android.app.Activity; import android.conten
2022-06-06

Android属性动画实现炫酷的登录界面

我们聊聊我们常写的登录界面,这个界面我相信很多人都写过,而且也没什么难度,但是如果要实现比较不一般的效果,那就要花点心思了,先看看项目的效果吧:我一直都不知道怎么在编辑框连设置图片大小,所以这个图不怎么样适配编辑框了,大家先凑合着看看。 我
2022-06-06

Android中编写属性动画PropertyAnimation的进阶实例

0、基础回顾 PropertyAnimation,属性动画,顾名思义就是利用对象的属性变化形成动画的效果。属性动画的类可以用Animator这个抽象类来表示,通常使用它的子类:AnimatorSet和ValueAnimator,同时Valu
2022-06-06

浅谈Android中视图动画的属性与使用

简介Android动画主要包括视图动画和属性动画,视图动画包括Tween动画和Frame动画,Tween动画又包括渐变动画、平移动画、缩放动画、旋转动画。 Tween动画的基本属性 目标 View; 时常 durati
2022-06-06

android 简单图片动画播放的实例代码

xml中: 代码如下:
2022-06-06

Android中Property Animation属性动画编写的实例教程

1、概述 Android提供了几种动画类型:View Animation 、Drawable Animation 、Property Animation 。View Animation相当简单,不过只能支持简单的缩放、平移、旋转、透明度基本
2022-06-06

Android Flutter制作一个修改组件属性的动画

flutter为我们提供了一个AnimationController来对动画进行详尽的控制,不过直接是用AnimationController是比较复杂的,如果只是对一个widget的属性进行修改,可以做成动画吗,本文就来探讨一下
2023-05-19

Android属性动画实现布局的下拉展开效果

在Android的3.0之后,google又提出了属性动画的这样一个框架,他可以更好的帮助我们实现更丰富的动画效果。所以为了跟上技术的步伐,今天就聊一聊属性动画。 这一次的需求是这样的:当点击一个View的时候,显示下面隐藏的一个View,
2022-06-06

Android应用中实现属性动画的原理是什么

今天就跟大家聊聊有关Android应用中实现属性动画的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android动画概述:Android 的动画可以分为三种:View 动
2023-05-31

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录