当前位置:首页 » 安卓系统 » android动画详解

android动画详解

发布时间: 2022-02-17 01:53:58

‘壹’ 请问android动画如何顺序播放两种效果

你可以这么做

在第一种动画上设置动画监听,当监听到动画结束后在执行第二种动画。例如

java">AlphaAnimationanimation=newAlphaAnimation(0,1);//第一种动画
animation.setDuration(100);
animation.setAnimationListener(newAnimationListener(){

@Override
publicvoidonAnimationStart(Animationanimation){
//代码

}

@Override
publicvoidonAnimationRepeat(Animationanimation){
//代码
}

@Override
publicvoidonAnimationEnd(Animationanimation){
//第二种动画
}
});
View.startAnimation(animation);

‘贰’ 如何高效学习Android动画

详细的可以看一下下面推荐的网址~~有图例~~解说更明确 Loading 预载动画程序设计 Loading网页预载程序是网页动画中的一个关键,因为即便是Flash生成的文件很小,但是制作出的大型动画对于使用调制解调器的用户速度还是需要解决的。如果没有一个预载的过程,只怕动画观看起来也不会很流畅。特别是在动画中加入了大量的声音和图像的动画没有了Loading将不会流畅的展现在我们眼前。 在此之前先学习一下在这章将要出现的属性与函数。如果由于例中使用了没有接触过的函数和属性,请先照例制作,等在以后的章节中学习了相关的其它函数后回过头来再看的话,就会完全明白例子中的作用。 ◆ _framesloaded _framesloaded是电影剪辑的属性,用来获取电影剪辑中的已经下载的帧数,当然大部的应用于电影剪辑的属性都可以应用于整部动画。此属性只能用来获取。 if(_root.mc._framesloaded>100){ _root.gotoandplay(1) } 此例子在普通模式下输入将成为: if(getproperty("_root.mc",_framesloaded)>100){ gotoandplay(1) } 普通模式中对属性的获取将使用getproperty函数,但此函数在新的.语法的使用中并非最佳,在以下的例子中将不再引用。此例中以获得电影剪辑已经下载的帧数大于100时,开始返回场景重新播放。这也是在网站制作中一个比较典型的例子,很多的电影剪辑因为体积问题,在“流”式播放过程中不会很流畅。而下例将是一个错误的例子。 _root.mc._framesloaded=100; _root.gotoandplay(1); 在编程中将不允许对_framesloaded属性进行赋值,如果你想当下载的帧数等于100时根目录开始回放的话,请按下例制作。 if(_root.mc._framesloaded=100){ _root.gotoandplay(1); } ◆ _totalframes _totalframes属性是用来获取电影剪辑实体的总帧数。也可以用来获取动画的总帧数。在下例中会看到它的用法。 i=_root.mc._totalframes; if(_root.cuttentframes=i); _root.stop(); } 程序中将电影剪辑实体的总帧数赋值赋予了变量i,而当主场景的动画播放指针播放到与电影剪辑中的总帧数相同的数目时,动画停止播放。此属性同样为非赋值属性。 ◆ ifFramesloaded ifFramesloaded函数也是用来获取已经下载的帧数的,与_framesloaded不同的是它用于一个简单的行为来描述已下载的帧数。而且此函数似乎是专为Loading设计,它位于Basic Actions指令集,指令名称为If Frames Is Loaded。以下实例将构成一个最为简单的Loading。 ifFrameLoaded(_totalframes){ gotoandplay(3); }else{ gotoandplay(1); } 将此程序加于影片的第二帧,可用于所有动画的预载技术。意思为当装入的帧数为总帧数时开始播放第三帧,如果不然,播放第一帧。在Flash5以后开始使用更多的函数和属性,所以此函数不推荐使用。 ◆ getBytesLoaded() getBytesLoaded()为获取电影剪辑实体的已下载字节数,如果是外部动画将返回动画的总字节数。GetBytesLoaded用于更加精确的Loading设计,因为它并不像_framesloaded属性是获取影片的总帧数,而是以字节做为单位获取。如果说动画的最后一帧将是一个大型的图像或是声音角色的话,哪么_framesloaded所获得的百分比将不准确,getBytesLoaded有效的弥补了此方面的不足。例: i=_root.getBytesTotal(); if(_root.getBytesLoaded()>=1000000){ n=_root.getBytesLoaded(); if(n<=i/4){ _root.stop(); tra 查看原帖>>

‘叁’ android中的动画有哪几类

在Android3.0(即API Level11)以前,Android仅支持2种动画:分别是Frame Animation(逐帧动画)和Tween Animation(补间动画),在3.0之后Android支持了一种新的动画系统,称为:Property Animation(属性动画)。

一、Frame Animation:(逐帧动画)

这个很好理解,一帧帧的播放图片,利用人眼视觉残留原理,给我们带来动画的感觉。它的原理的GIF图片、电影播放原理一样。

1.定义逐帧动画比较简单,只要在中使用子元素定义所有播放帧即可。

(1) android:oneshot 设置是否仅播放一次

(2) android:drawable 设置每一帧图片

(3) android:ration 设置图片间切换间隔

2.习惯上把AnimationDrawable设置为ImageView的背景

android:background=@anim/frame_anim

然后我们就可以在java代码中获取AnimationDrawable对象了

AnimationDrawable anim = (AnimationDrawable)imageView.getBackground();

(需要注意的是,AnimationDrawable默认是不播放的,调用其start()方法开始播放,stop停止播放)

3.上面的动画文件是通过xml文件来配置的,如果你喜欢,也可以通过在java代码中创建AnimationDrawable对象,然后通过addFrame(Drawable frame, int ration)方法向动画添加帧,然后start()。。。

二、Tween Animation:(补间动画)

补间动画就是我们只需指定开始、结束的“关键帧“,而变化中的其他帧由系统来计算,不必自己一帧帧的去定义。

1. Android使用Animation代表抽象动画,包括四种子类:AlphaAnimation(透明度动画)、ScaleAnimation(缩放动画)、TranslateAnimation(位移动画)、RotateAnimation(透明度动画)。Android里面允许在java中创建Animation类对象,但是一般都会采用动画资源文件来定义动画,把界面与逻辑分离

<set android:interpolator="@android:anim/linear_interpolator" xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 定义透明度的变换 -->

<!-- 定义旋转变换 -->
<rotate android:ration="3000/" android:fromdegrees="0" android:pivotx="50%" android:pivoty="50%" android:todegrees="1800">
</rotate></alpha></set>

(一个set可以同时定义多个动画,一起执行。)

2. android:interpolator=@android:anim/linear_interpolator控制动画期间需要补入多少帧,简单来说就是控制动画速度,有些地方翻译为“插值“。Interpolator有几种实现类:LinearInterpolator、AccelerateInterpolator、、CycleInterpolator、DecelerateInterpolator,具体使用可以参考官方API Demo。

3. 定义好anim文件后,我们可以通过AnimationUtils工具类来加载它们,加载成功后返回一个Animation。然后就可以通过View的startAnimation(anim)开始执行动画了。

Animation anim = AnimationUtils.loadAnimation(this, R.anim.anim);
//设置动画结束后保留结束状态
anim.setFillAfter(true);
//设置插值效果
anim.setInterpolator(interpolator);
//对view执行动画
view. startAnimation(anim);

三、Property Animation:(属性动画)

属性动画,这个是在Android 3.0中才引进的,它可以直接更改我们对象的属性。在上面提到的Tween Animation中,只是更改View的绘画效果而View的真实属性是不改变的。假设你用Tween动画将一个Button从左边移到右边,无论你怎么点击移动后的Button,他都没有反应。而当你点击移动前Button的位置时才有反应,因为Button的位置属性木有改变。而Property Animation则可以直接改变View对象的属性值,这样可以让我们少做一些处理工作,提高效率与代码的可读性。

(1)ValueAnimator:包含Property Animation动画的所有核心功能,如动画时间,开始、结束属性值,相应时间属性值计算方法等。应用ValueAnimator有两个步骤

1计算属性值。

2根据属性值执行相应的动作,如改变对象的某一属性。

我们的主是第二步,需要实现ValueAnimator.onUpdateListener接口,这个接口只有一个函数onAnimationUpdate(),将要改变View对象属性的事情在该接口中do。

animation.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//do your work
}
});

(2)ObjectAnimator:继承自ValueAnimator,要指定一个对象及该对象的一个属性,当属性值计算完成时自动设置为该对象的相应属性,即完成了Property Animation的全部两步操作。实际应用中一般都会用ObjectAnimator来改变某一对象的某一属性,但用ObjectAnimator有一定的限制,要想使用ObjectAnimator,应该满足以下条件:

1.对象应该有一个setter函数:set(驼峰命名法)

2如下面的例子,像ofFloat之类的工场方法,第一个参数为对象名,第二个为属性名,后面的参数为可变参数,如果values…参数只设置了一个值的话,那么会假定为目的值,属性值的变化范围为当前值到目的值,为了获得当前值,该对象要有相应属性的getter方法:get

3如果有getter方法,其应返回值类型应与相应的setter方法的参数类型一致。

ObjectAnimator oa=ObjectAnimator.ofFloat(tv, alpha, 0f, 1f);
oa.setDuration(3000);
oa.start();

如果不满足上面的条件,我们只能乖乖的使用ValueAnimator来创建动画。

(3)Animator.AnimatorListener:可以为Animator设置动画监听,需要重写下面四个方法。

onAnimationStart()
onAnimationEnd()
onAnimationRepeat()
onAnimationCancel()

这里我们也可以实现AnimatorListenerAdapter,他的好处是可以只用定义想监听的事件而不用实现每个函数却只定义一空函数体。如下:

anim.addListener(new AnimatorListenerAdapter() {
public void on AnimationEnd(Animator animation){
//do your work
}
});

(4)AnimationSet:可以组合多个动画共同工作

AnimatorSet bouncer = new AnimatorSet();
bouncer.play(anim1).before(anim2);
bouncer.play(anim2).with(anim3);
bouncer.play(anim2).with(anim4)
bouncer.play(anim5).after(amin2);
animatorSet.start();

上面的代码意思是: 首先播放anim1;同时播放anim2,anim3,anim4;最后播放anim5。

(5)TimeInterplator:与Tween中的interpolator类似。有以下几种

AccelerateInterpolator 加速,开始时慢中间加速

DecelerateInterpolator 减速,开始时快然后减速

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

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

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

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

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

LinearInterpolator 线性,线性均匀改变

OvershottInterpolator 回弹,最后超出目的值然后缓慢改变到目的值

TimeInterpolator 一个接口,允许你自定义interpolator,以上几个都是实现了这个接口

(6)Keyframes:可以让我们定义除了开始和结束以外的关键帧。KeyFrame是抽象类,要通过ofInt(),ofFloat(),ofObject()获得适当的KeyFrame,然后通过PropertyValuesHolder.ofKeyframe获得PropertyValuesHolder对象,如下:

Keyframe kf0 = Keyframe.ofInt(0, 400);
Keyframe kf1 = Keyframe.ofInt(0.25f, 200);
Keyframe kf2 = Keyframe.ofInt(0.5f, 400);
Keyframe kf4 = Keyframe.ofInt(0.75f, 100);
Keyframe kf3 = Keyframe.ofInt(1f, 500);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe(width, kf0, kf1, kf2, kf4, kf3);
ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(btn, pvhRotation);
上述代码的意思是:设置btn对象的width属性值使其:开始时 Width=400,动画开始1/4时 Width=200,动画开始1/2时 Width=400,动画开始3/4时 Width=100,动画结束时 Width=500。

(7)ViewPropertyAnimator:对一个View同时改变多种属性,非常推荐用这种。该类对多属性动画进行了优化,会合并一些invalidate()来减少刷新视图。而且使用起来非常简便,但是要求API LEVEL 12,即Android 3.1以上。仅需要一行代码即可完成水平、竖直移动

myView.animate().translationX(50f). translationY(100f);

(8)常需要改变的一些属性:

translationX,translationY: View相对于原始位置的偏移量

rotation,rotationX,rotationY: 旋转,rotation用于2D旋转角度,3D中用到后两个

scaleX,scaleY: 缩放比

x,y: View的最终坐标,是View的left,top位置加上translationX,translationY

alpha: 透明度

四、最后自己总结一下这三种动画的优缺点:

(1)Frame Animation(帧动画)主要用于播放一帧帧准备好的图片,类似GIF图片,优点是使用简单方便、缺点是需要事先准备好每一帧图片;

(2)Tween Animation(补间动画)仅需定义开始与结束的关键帧,而变化的中间帧由系统补上,优点是不用准备每一帧,缺点是只改变了对象绘制,而没有改变View本身属性。因此如果改变了按钮的位置,还是需要点击原来按钮所在位置才有效。

(3)Property Animation(属性动画)是3.0后推出的动画,优点是使用简单、降低实现的复杂度、直接更改对象的属性、几乎可适用于任何对象而仅非View类,缺点是需要3.0以上的API支持,限制较大!但是目前国外有个开源库,可以提供低版本支持!

‘肆’ android转场动画windowAnimation和ActivityAnimation的区别

android转场动画windowAnimation和ActivityAnimation的区别显而易见,window与Activity本身从名字上就知道不同,但对于项目开发中 windowAnimation和ActivityAnimation的区别必须心领神会。区搜索别主要如下1.windowAnimation包括 windowEnterAnimation 和 windowExitAnimation ;ActivityAnimation包含 android:activityOpenEnterAnimation , android:activityOpenExitAnimation , android:activityCloseEnterAnimation 和 android:activityCloseExitAnimation2.在项目中WindowAnimation的控制权大于Activity的控制权,即在Activity转场过程中,如果同时设置了WindowAnimation和ActivityAnimation,那么 可能(因为这种情况非常多) 只会执行WindowAnimation3.对于WindowAnimation的定义很简单,在style.xml文件中只需要继承Animation Style即可<style name="Animation" parent="@android:style/Animation"><!--窗体进入动画--><item name="android:windowEnterAnimation">@anim/slide_left_enter</item><!--窗体退出动画--><item name="android:windowExitAnimation">@anim/slide_right_exit</item></style>对于Activity,需要继承Animation Activity Style<style name="FeelyouWindowAnimTheme" parent="@android:style/Animation.Activity"><item name="android:activityOpenEnterAnimation">@android:anim/slide_in_left</item><item name="android:activityOpenExitAnimation">@android:anim/slide_out_right</item><item name="android:activityCloseEnterAnimation">@anim/push_right_in</item><item name="android:activityCloseExitAnimation">@anim/push_left_out</item></style>当自己从 A1 启动 A2 时,A1 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation当自己从 A1 启动 A2 时,A2 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation当自己从 A2 退出回到 A1 时,A2 从屏幕上消失,这个叫做 android:activityCloseExitAnimation当自己从 A2 退出回到 A1 时,A1 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation从上述2中动画的定义上来看,显然ActivityAnimation更为复杂,但这种复杂带来的转场效果非常好,可以同时控制2个Activity的动画,而不像WindowAnimation只能控制下一个Activity的窗体动画。5.在开发中,窗体动画也可以使用 Activity. overridePendingTransition来设置,也可以定义在主题中,但Activity只能使用在主题中<applicationandroid:name="test.view.weitop.BaseApplication"android:allowBackup="false"android:hardwareAccelerated="false"android:icon="@drawable/app_logo"android:label="@string/app_name"android:largeHeap="true"android:theme="@style/Theme.App" ></application>6.对于比较追求界面美感的动画,使用ActivityAnimation要好得多,因此对于一般开发使用windowAnimation即可,但对于追求用户体验,那么直接使用Activity Animation 吧

‘伍’ android中的动画有哪几类,它们的特点和区别是什么

android动画有两类:
一种是tweened animation(渐变动画)
一种是frame by frame(逐帧动画)
特点:
渐变动画是通过改变view的大小、旋转的角度、透明度、位置来产生动画,可以控制动画的播放快慢以及加速度。
逐帧动画是用一组图片轮流绘制,产生动画的感觉。类似于gif图片。
区别:
渐变动画的所有操作是通过矩阵变换对同一个物体(绘制的一个view或者图片)进行操作产生动画。
而逐帧动画是多个物体(多张图片)进行绘制,可以说这多张图片是不相关的(从播放的角度来看只能说是内容相关)。

‘陆’ Android 中的动画有哪几类,它们的特点和区别是什么

1.View Animation(Tween Animation):补间动画,给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变。
View animation只能应用于View对象,而且只支持一部分属性,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化.

2.Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影补间动画和帧动画。
补间动画和Frame动画的定义:
所谓补间动画,是指通过指定View的初末状态和变化时间、方式,对View的内容完成一系列的图形变换来实现动画效果。主要包括四种效果:Alpha、Scale、Translate和Rotate。
帧动画就是Frame动画,即指定每一帧的内容和停留时间,然后播放动画。。

3.属性动画
只是一个动画效果,组件其实还在原来的位置上,xy没有改变
###位移:
第一个参数target指定要显示动画的组件
第二个参数propertyName指定要改变组件的哪个属性
第三个参数values是可变参数,就是赋予属性的新的值
传入0,代表x起始坐标:当前x + 0
传入100,代表x终点坐标:当前x + 100
//具有get、set方法的成员变量就称为属性
ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "translationX", 0, 100) ;

4.四种基本的动画 ,透明/伸缩/移动/旋转。

(1)XML中

alpha 渐变透明度动画效果

scale 渐变尺寸伸缩动画效果
translate画面转换位置移动动画效果
rotate画面转移旋转动画效果
(2) JavaCode中

AlphaAnimation渐变透明度动画效果
ScaleAnimation渐变尺寸伸缩动画效果
TranslateAnimation画面转换位置移动动画效果
RotateAnimation画面转移旋转动画效果
(3)Android动画模式
Animation主要有两种动画模式:
一种是tweened animation(渐变动画)

一种是frame by frame(画面转换动画)

Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;
Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

‘柒’ Android 中的动画有哪几类,它们的特点和区别是什么

Android包含三种动画:

ViewAnimation、 Drawable Animation、Property Animation。

ViewAnimation(Tween Animation补间动画):


动画的对象除了传统的View对象,还可以是Object对象,动画之后,Object对象的属性值被实实在在的改变了。Property animation能够通过改变View对象的实际属性来实现View动画。任何时候View属性的改变,View能自动调用invalidate()来刷新。

‘捌’ android 属性动画 有什么好处

属性动画又称补间动画,可以高效完成简单的动画效果。(是通过阀值器来调整的)从而节约内存空间。
有比较才有伤害,对比帧动画,是通过不同的图片的切换来实现动画的效果,是非常耗内存的,但可以实现复杂的动画内容。
所以两者各有所长短,实际上他们应用在不同的地方。属性动画多用于控件的状态变化,而帧动画用于展现复杂且连续的图片(如,等待动画,短视频)。

‘玖’ 安卓动画这些参数是什么意思 <rotate android:fromDegr

第一个是一个旋转动画,正好顺时针旋转一周,以此动画作用控件的正中心为旋转中心,持续时间3秒;
第二个是位移动画,x坐标从0移动到自身的百分之60长,y从0到0,持续时间3秒;
这些都是动画里比较基础的东西,网络或者谷歌一下就有详解了,如果还不懂,可以追问~

‘拾’ Android的动画四种类型中alpha的参数含义

alpha是透明度渐变的动画效果
透明度的取值范围是0-1之间
0表示完全透明,1表示完全不透明
android:fromAlpha="1.0" //这是表示动画一开始是完全不透明
android:toAlpha="0.0" //这是表示动画结果时是完全透明
android:ration="500" //这是动画的时间

热点内容
java等待 发布:2025-02-07 07:28:24 浏览:611
vs编译器会自己加空格吗 发布:2025-02-07 07:23:05 浏览:174
光遇切换账号安卓要输入些什么 发布:2025-02-07 07:10:20 浏览:501
多角线算法 发布:2025-02-07 07:08:56 浏览:273
有效提高ftp传输速度 发布:2025-02-07 07:06:47 浏览:703
寒灵之剑脚本 发布:2025-02-07 06:57:12 浏览:119
解压的窗口 发布:2025-02-07 06:44:34 浏览:798
android身份证 发布:2025-02-07 06:36:43 浏览:431
python的库在哪 发布:2025-02-07 06:30:24 浏览:349
带锁的铅笔如何改密码 发布:2025-02-07 06:18:05 浏览:165