Android动画效果(补间动画Tween与 帧动画Frame)

Android 进阶技术汇总十三:动画比较:补间动画(Tween)+帧动画(Frame)+属性动画(Property) 前言: 1. 概念: 补间动画tween Animation:用于Activity|PopupWindow|AlertDialog等界面的Enter|Exit动画(没有改变View本身属性); 帧动画FrameAnimation:用于Android开关机动画; 属性动画 Property Animation:通过特定时间内修改View本身的属性+View重绘,实现视觉的动画效果。 2.... 阅读详情

Android动画主要包含补间动画(Tween)View Animation、帧动画(Frame)Drawable Animation、以及属性动画Property Animation。下面依次介绍一下各个动画。

1. 补间动画(Tween)

Tween动画,通过对View的内容进行一系列的图形变换 (包括平移、缩放、旋转、改变透明度)来实现动画效果。动画效果的定义可以采用XML来做也可以采用编码来做。Tween动画有4种类型:

动画的类型                                  

Xml定义动画使用的配置节点               

编码定义动画使用的类                       

渐变透明度动画效果

AlphaAnimation

渐变尺寸缩放动画效果

ScaleAnimation

画面位置移动动画效果

TranslateAnimation

画面旋转动画效果

RotateAnimation

我们可以为每一个动画设置动画插入器,Android自带的几种动画插入器:

AccelerateInterpolator

加速,开始时慢中间加速

DecelerateInterpolator

减速,开始时快然后减速

AccelerateDecelerateInterolator

先加速后减速,开始结束时慢,中间加速

AnticipateInterpolator

反向,先向相反方向改变一段再加速播放

AnticipateOvershootInterpolator

反向加超越,先向相反方向改变,再加速播放,会超出目的值然后缓慢移动至目的值

BounceInterpolator

跳跃,快到目的值时值会跳跃,如目的值100,后面的值可能依次为85,77,70,80,90,100

CycleIinterpolator

循环,动画循环一定次数,值的改变为一正弦函数:Math.sin(2* mCycles* Math.PI* input)

LinearInterpolator

线性,线性均匀改变

OvershottInterpolator

超越,最后超出目的值然后缓慢改变到目的值

1.1预备知识:

抽象类Animation是一个实现androidUI界面动画效果的API,Animation是补间动画的基类,它的直接子类AlphaAnimation, RotateAnimation, ScaleAnimation, TranslateAnimation,AnimationSet,提供了一系列的动画效果,可以进行淡入淡出、旋转、缩放、动画集等,这些效果可以应用在绝大多数的控件中。

1.2AlphaAnimation实现淡入淡出的动画效果

//方式一通过代码的方式定义透明度动画

  Animation alphaAnimation=new AlphaAnimation(1, (float) 0.0);
                alphaAnimation.setDuration(1000);//设置动画持续时间为3秒
                alphaAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
                imgShow.startAnimation(alphaAnimation);
//方式二通过在xml中定义透明度动画
第一步:定义xml动画文件:alpha.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.1"
        android:duration="3000"
        android:fillAfter="true"
        android:repeatCount="2">
    </alpha>
</set>

第二步:加载xml动画文件并将其设置到指定的View上

  Animation alphaAnimation2 = AnimationUtils.loadAnimation(MainActivity.this, alphas);//加载Xml文件中的动画
  imgShow.startAnimation(alphaAnimation2);


1.3.RotateAnimation实现旋转的动画效果

主要属性及说明:
repeatCount 重复次数
fromDegrees为动画起始时物件的角度:
当角度为负数——表示逆时针旋转
当角度为正数——表示顺时针旋转
(负数fromDegrees——toDegrees正数:顺时针旋转)
(负数fromDegrees——toDegrees负数:逆时针旋转)
(正数fromDegrees——toDegrees正数:顺时针旋转)
(正数fromDegrees——toDegrees负数:逆时针旋转)
toDegrees属性为动画结束时物件旋转的角度可以大于360度
pivotX,pivotY 为动画相对于物件的X、Y坐标的开始位.说明:以上两个属性值从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置。
实例:
//方式一通过代码的方式定义旋转动画

     Animation rotateAnimation = new RotateAnimation(0, -180);
     rotateAnimation.setDuration(2000);//设置动画持续时间为3秒
     rotateAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
     imgShow.startAnimation(rotateAnimation);
//方式二通过在xml中定义旋转动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
    android:fromDegrees="0"
    android:toDegrees="45"
    android:duration="3000"
    android:fillAfter="true">
</rotate>
</set>

Animation rotateAnimation2=AnimationUtils.loadAnimation(MainActivity.this, rotates);//加载Xml文件中的动画
imgShow.startAnimation(rotateAnimation2);


1.4.ScaleAnimation实现缩放动画效果

主要属性及说明:
fromXScale(浮点型)属性为动画起始时X坐标上的缩放尺寸
fromYScale(浮点型)属性为动画起始时Y坐标上的缩放尺寸
toXScale(浮点型) 属性为动画结束时X坐标上的缩放尺寸
toYScale(浮点型) 属性为动画结束时Y坐标上的缩放尺寸
说明: 以上四种属性值
0.0表示收缩到没有
1.0表示正常无缩放
值小于1.0表示收缩
值大于1.0表示放大
pivotX(浮点型) 属性为动画相对于物件的X坐标的开始位置
pivotY(浮点型) 属性为动画相对于物件的Y坐标的开始位置
说明:
以上两个属性值从0%-100%中取值
50%为物件的X或Y方向坐标上的中点位置
duration(长整型)属性为动画持续时间。说明: 时间以毫秒为单位
fillAfter(布尔型)属性当设置为true,该动画转化在动画结束后被应用
实例:
//方式一通过代码的方式定义缩放动画

 Animation scaleAnimation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f);
 scaleAnimation.setDuration(2000);//设置动画持续时间为3秒
 scaleAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
 scaleAnimation.setRepeatCount(3);
 imgShow.startAnimation(scaleAnimation);
//方式二通过在xml中定义缩放动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:fromXScale="0.5"
        android:toXScale="1.0"
        android:fromYScale="1.0"
        android:toYScale="1.0"
        android:duration="3000"
        android:fillAfter="true"
    >
    </scale>
</set>
Animation rotateAnimation2=AnimationUtils.loadAnimation(MainActivity.this, scales);//加载Xml文件中的动画
imgShow.startAnimation(rotateAnimation2);

1.5. TranslateAnimation实现位移动画效果

//方式一通过代码的方式定义位移动画

  Animation translateAnimation = new TranslateAnimation(0, 100, 0, 100);
  translateAnimation.setDuration(3000);//设置动画持续时间为3秒
  translateAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
  imgShow.startAnimation(translateAnimation);
第二步:加载xml动画文件并将其设置到指定的View上

 Animation rotateAnimation2=AnimationUtils.loadAnimation(MainActivity.this, translates);//加载Xml文件中的动画
 imgShow.startAnimation(rotateAnimation2);


1.6.AnimationSet实现多种动画混合效果

定义动画集主要用到了AnimationSet类,该类可以添加多个补间动画啊。

//方式一通过代码的方式定义动画集

AnimationSet animationSet=new AnimationSet(true);//定义一个动画集,并设定所有的动画使用一个动画插入其
Animation translateAnimation2=AnimationUtils.loadAnimation(MainActivity.this, translates);//加载Xml文件中的动画
Animation alphaAnimation2=AnimationUtils.loadAnimation(MainActivity.this, alphas );//加载Xml文件中的动画
Animation rotateAnimation2=AnimationUtils.loadAnimation(MainActivity.this, rotates);//加载Xml文件中的动画
Animation scaleAnimation2=AnimationUtils.loadAnimation(MainActivity.this, scales);//加载Xml文件中的动画
animationSet.addAnimation(translateAnimation2);
animationSet.addAnimation(alphaAnimation2);
animationSet.addAnimation(rotateAnimation2);
animationSet.addAnimation(scaleAnimation2);
imgShow.startAnimation(animationSet);

2. 帧动画(Frame)

 逐帧动画(Frame-by-frame Animations)从字面上理解就是一帧挨着一帧的播放图片,就像放电影一样。和补间动画一样可以通过xml实现也可以通过java代码实现。

具体实现过程
1.)在res/drawable目录下一个文件framelist.xml,内容如下:

<?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/a01" android:duration="200"/>
    <item android:drawable="@drawable/a02" android:duration="200"/>
    <item android:drawable="@drawable/a03" android:duration="200"/>
    <item android:drawable="@drawable/a04" android:duration="200"/>
    <item android:drawable="@drawable/a05" android:duration="200"/>
    <item android:drawable="@drawable/a06" android:duration="200"/>
    <item android:drawable="@drawable/a07" android:duration="200"/>
    <item android:drawable="@drawable/a08" android:duration="200"/>
    <item android:drawable="@drawable/a09" android:duration="200"/>
</animation-list>

根节点是animation-list(动画列表),里面有一个或者多个item节点组成,oneshot属性表示是否只播放一次,true表示只会播放一次,false表示一直循环播放,内部用item节点声明一个动画帧,android:drawable指定此帧动画所对应的图片资源,android:druation代表此帧持续的时间,整数,单位为毫秒。

注意:

   之前使用eclipse或者Android ADT开发的时候,文件可以放在res/anim和res/drawable两个文件夹下面,虽然谷歌推荐放在res/drawable文件夹下但是不会报错,在使用Android studio时候就没那么幸运了,如果不放在res/drawable文件夹下面会报错

2.)用ImageView控件作为动画载体来显示动画

 <ImageView
   android:id="@+id/animation_iv"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center"
   android:layout_margin="10dp"
   android:src="@drawable/lottery_animlist" />
这个时候我们运行一下,发现动画没有运行而是停留在第一帧,那是因为AnimationDrawable播放动画是依附在window上面的,而在Activity onCreate方法中调用时Window还未初始化完毕,所有才会停留在第一帧,要想实现播放必须在onWindowFocusChanged中添加如下代码:

public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    imgShow.setImageResource(R.drawable.framelist);
    AnimationDrawable animationDrawable = (AnimationDrawable) imgShow.getDrawable();
    animationDrawable.start();
}

如果想要停止播放动画可以调用AnimationDrawable的stop方法

  imageView.setImageResource(R.drawable.framelist);
  AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
  animationDrawable.stop();
3.)纯Java代码实现方式
AnimationDrawable anim = new AnimationDrawable();
    for (int i = 1; i <= 6; i++) {
    int id = getResources().getIdentifier("lottery_" + i, "drawable", getPackageName());
    Drawable drawable = getResources().getDrawable(id);
    anim.addFrame(drawable, 200);
    }
    anim.setOneShot(false);
    imageView.setImageDrawable(anim);
    anim.start();

4.)AnimationDrawable 几个常见的api

void start() - 开始播放动画
void stop() - 停止播放动画
addFrame(Drawable frame, int duration) - 添加一帧,并设置该帧显示的持续时间
void setOneShoe(boolean flag) - false为循环播放,true为仅播放一次
boolean isRunning() - 是否正在播放


Android中补间动画TweenAnimation 博客示例代码,详情访问:http://blog.youkuaiyun.com/xiaohao0724/article/details/54614024 立即下载

相关推荐

Android动画效果--FrameByFrame动画

Android动画效果--FrameByFrame动画 Android 动画实现的火焰效果。

android tween与frame 区别,Android动画基础-Tween和Frame动画

前言Android动画是android开发中非常重要的一部分,现在越来越多的产品都加入了各种酷炫的动画,作为一名Android小码农,学习Android的动画是必不可少的。Android给我们提供了几种类型的动画:Tween动画,Frame动画,Property动画,这篇文章先介绍前两种比较简单的。一. Tween动画Tween动画可以对对象进行缩小,放大,旋转,渐变,位移等操作,针对这不同的操作...

weixin_36099549的博客 212

android动画之帧动画(drawable animation)和补间动画(view animation)

基本的太阳地球月亮模型,地球围绕太阳转,月球围绕地球转

【Android】两种动画介绍(Tween动画、Frame动画)

Android中的动画类型有两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。下面将一一详细介绍: 本博客参考自网络,结合自己一点理解,实为学习之用,不为其他目的。 一,Tween动画 又称“补间动画”、“中...

编程世界 631

Android动画之补间动画

资源博客地址:https://blog.youkuaiyun.com/lanrenxiaowen/article/details/83546514

补间动画(透明、渐变、位移、旋转)

补间动画,有需要的可以看看哈,。有什么问题,请指出,我会改正的,。 谢谢

Android的动画知识点总结

动画的类型和基本使用1. 补间动画(Tween)2. 帧动画(Frame)3. 属性动画(ObjectAnimator/ValueAnimator)参考材料 1. 补间动画(Tween) 操作某一个控件让其实现平移,旋转,缩放以及透明度转换的动画,如果有学过CSS的人应该会清楚,就是类似那样的动画。先设定好动画的效果和时长,再调用后进行动画。 效果比较有限,只能实现平移,旋转,缩放以及透明度四种...

wodongx123的博客 360

嵌入式学习之QT学习---14 QT跨平台运行之把QT程序交叉编译到ARM开发板

想要把qt工程放到开发板上运行,就需要用到交叉编译。由于qt是跨平台的,所以只需要换个编译器编译一下就可以。 以“定时器”的例子为例,在移植之前还需要进行一个准备工作,在windows下运行的时候,电脑屏幕很大,但是运行的窗口只有一点点大,开发板也有外接屏幕,如何让运行窗口自动适配开发板的外接屏幕呢?令其占满屏幕显示,而不是一小块。 第一步:需要设置一下,先给ui布局,如果不布局,控件就不会随着屏幕的大小的变化而变化。 第二步:利用代码来获取屏幕的大小,给widget.cpp文件下添加如下代码 #inclu

qq_42822743的博客 5457

android 动画

帧动画非常容易理解,其实就是简单的由N张静态图片收集起来,然后我们通过控制依次显示 这些图片,因为人眼"视觉残留"的原因,会让我们造成动画的"错觉",跟放电影的原理一样!从本节开始我们来探究Android中的动画,毕竟在APP中添加上一些动画,会让我们的应用变得 很炫,比如最简单的关开Activity, 当然自定义控件动画肯定必不可少啦~而Android中的动画 分为三大类, 逐帧动画(Frame)以及补间动画(Tween),还有Android 3.0以后引入的属性动画 (Property), 而本节给大家

rhtnll的博客 322

思科—OSPF多区域配置实验

实验目的:配置OSPF多区域,使得不同网段的PC互相ping通。 网络拓扑如下: R0的配置 Router>en Router#conf t Router(config)#int g0/1 Router(config-if)#ip add 192.168.1.1 255.255.255.0 Router(config-if)#no shut Router(config-if)#exit Router(config)#int g0/0 Router(config-if)#ip add 192.168.

m0_46237205的博客 1万+

BMS菊花链芯片怎么选?一张表对比ADI、TI、NXP五大厂家的隔离通信方案

本文深入对比了ADI、TI、NXP等五大厂商的BMS菊花链芯片隔离通信方案,涵盖技术演进、核心参数和场景化选型策略。通过实测数据和开发经验分享,帮助工程师在新能源汽车和储能系统中选择最优方案,提升通信可靠性和成本效益。

weixin_33724046的博客 433

Android开发之动画效果浅析

转载自:http://blog.youkuaiyun.com/fengyuzhengfan/article/details/39970201 Android开发之动画效果浅析  请尊重他人的劳动成果,转载请注明出处:Android开发之动画效果浅析  程序运行效果图: Android动画主要包含补间动画(Tween)View Animation、帧动画(Frame)Drawab

lywoct的博客 416

SFM(structure from motion 从运动恢复结构)和MVS(multi-view stereo 多视图立体视觉)

主要目的:SFM是重建稀疏点云的,MVS重建的是稠密点云。 输入的数据:SFM是没有标定的数据,而MVS输入的是标定的数据。 为什么SFM无法重建出稠密的点云,但是MVS可以? SFM中我们用来做重建的点是由特征匹配提供的!这些匹配点天生不密集!MVS则几乎对照片中的每个像素点都进行匹配,几乎重建每一个像素点的三维坐标,这样得到的点的密集程度可以较接近图像为我们展示出的清晰度。 SFM和MVS关系 SFM给MVS算好了输入视角的位姿,内参,稀疏点云以及它们的共视关系,MVS再利用这些信息以及彩色图

Vpn_zc的博客 1万+

Android 动画的分类

分为三类: View Animation (补间动画 Tween动画) Drawable Animation(帧动画 Frame动画) Property Animation(android 3.0引入) ViewAnimation: 基于View的渐变动画,只改变View的绘制效果,而实际属性值没变,比如按钮移动位置,其实实际位置并没有发生变化。 代...

weixin_33720078的博客 73

ubuntu下编译qtwebengine

ubuntu qtwebengine

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 1463

[网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制全网源码详细解读

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文分享了逆向分析OllyDbg动态调试工具的基本用法,包括界面介绍、常用快捷键和TraceMe案例分析。这篇文章将继续详细讲解WannaCry蠕虫的传播机制,带领大家详细阅读源代码,分享WannaCry勒索病毒是如何传播感染的。作者分析该病毒一个月,一方面觉得自己技术菜,另一方面深知系统安全需要坚持,继续加油。希望文章对您有所帮助~

杨秀璋的专栏 1万+

android属性动画作用范围,Android开发之动画效果浅析(一)

程序运行效果图:Android动画主要包含补间动画(Tween)View Animation、帧动画(Frame)Drawable Animation、以及属性动画Property Animation。下面依次介绍一下各个动画。1. 补间动画(Tween)Tween动画,通过对View的内容进行一系列的图形变换 (包括平移、缩放、旋转、改变透明度)来实现动画效果。动画效果的定义可以采用XML来做也...

weixin_33765908的博客 350

创新引入HAttention模块:提升YOLOv8小目标检测精度【YOLOv8】

YOLOv8在前几个版本的基础上进行了多项优化,特别是在模型的速度和精度上做了较大改进。改进的backbone:引入了更加高效的骨干网络(backbone)设计,如更深的网络层和更高效的特征提取模块。增强的Neck模块:使用了PANet等机制来更好地融合不同尺度的特征,增强了多尺度目标检测能力。增强的Head模块:包括多头检测头,以便针对不同大小的目标进行更精细的预测。尽管如此,YOLOv8仍面临着在小目标检测精度上不如大型目标的挑战,尤其在复杂背景或高密度目标环境下。

博客 2769

Android动画介绍

关于Android动画的介绍,包括补间动画、属性动画和帧动画

chen_android_sina的博客 307

射频仿真软件:ADS (Advanced Design System)_(29).ADS脚本编程与自动化

ADS脚本编程为射频设计提供了强大的自动化工具,可以帮助用户实现设计流程的优化、参数扫描和优化、结果分析和报告生成等任务。选择合适的脚本语言(Python、Tcl、AEL)并合理设置ADS环境,可以显著提高设计效率和准确性。通过实际项目中的应用案例,我们可以更好地理解如何利用脚本编程解决复杂的射频设计问题。希望本文对您的ADS脚本编程学习有所帮助。

kkchenjj的博客 2472

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android中的动画:帧动画、补间动画、属性动画

帧动画 >一张张图片不断的切换,形成动画效果 *在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长 *在屏幕上播放帧动画 ImageViewiv = (ImageView) findViewById(R.id.iv); //把动画文件设置为imageView的背景 iv.setBackground

clx44551的博客 478

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android开发之动画效果浅析(一)

Android开发之动画效果浅析 请尊重他人的劳动成果,转载请注明出处:Android开发之动画效果浅析 程序运行效果图: Android动画主要包含补间动画(Tween)View Animation、帧动画(Frame)Drawable Animation、以及属性动画Property Animation。下面依次介绍一下各个动画。 1. 补间动画(Tween)

技术分享 1175

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android 动画(Frame, View, Property)的区别,属性动画及动画框架Demo

Frame/View动画通过不断的调用OnDraw方法来进行UI的绘制,而Property属性动画一般只调用ViewGroup进行绘制。 -- ViewGroup的绘制 ViewGroup通常是不需要绘制的,因为本身就没有需要绘制的东西。 如果不是指定ViewGroup的背景色,那么ViewGroup的o'nDraw方法都不会被调用。 ViewGroup会使用dispatchDraw()方法绘制...

ShareUs的专栏 1451

android 帧Frame和补间Tween动画

android的动画总共有两种方式: (一)帧(Frame)动画 就是多张图片,控制好播放顺序,持续时间,从头到尾的播放,看起来就像是电视电影的画面。 实现方式: 1.新建一个AnimationDrawable对象,把这些图片加载进去。 addFrame第一参数表示要加载的内容,第二参数表示持续时间。      frameAnimation = new AnimationDrawable

nicholas6lee的专栏 1124

Android动画(Frame Animation帧动画,Tweened Animation补间动画,Property Animation 属性动画)

Android动画(Frame Animation帧动画,Tweened Animation补间动画,Property Animation 属性动画)

夏夜追凉丶的博客 2837

Android 帧动画(Frame,补间动画(Tween)的简单使用

Android 帧动画(Frame,补间动画(Tween)的简单使用

qq_54348654的博客 508
上一篇: Android资源文件res的使用详解(strings,layout,drawable,arrays等)
下一篇: Android属性动画完全解析 (ValueAnimator,ObjectAnimator)(上)
rorntuck7
博客等级 码龄16年 46粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值