动画的分类

动画的分类,第1张

动画的分类

动画的种类及区别
  • 一、视图动画(View Animation)
    • 1. 概述:
    • 2. 视图动画说明:
      • 2.1.Animation属性详解
      • 2.2 Alpha属性详解
      • 2.3 Rotate属性详解
      • 2.4 Scale属性详解
      • 2.5 Translate属性详解
      • 2.6 AnimationSet属性详解
    • 3. 视图动画使用方法
      • xml 方式
      • Java代码方式
      • Animation实用方法介绍
    • 4. 视图动画注意事项
    • 5. 视图动画interpolator插值器详解
      • 5.1插值器使用方法
      • 5.2插值器的自定义
        • 5.2.1 xml 自定义插值器的步骤
        • 5.2.2 Java自定义插值器
  • 二、帧动画(frame)
    • 1.动画描述
    • 2. Drawable动画说明
    • 3. 动画的演示实例
  • 三、属性动画(Propety Animation)
    • 1.属性动画描述
    • 2.属性动画说明
      • 2.1android属性动画提供以下属性:
      • 2.2 XML方式属性动画

一、视图动画(View Animation) 1. 概述:
	视图动画,也叫Tween(补间)动画可以在一个视图容器中执行一系列简单变换(位置、大小、旋转、透明度)。譬如,如果你有一个TextView 对象,您可以移动、旋转、缩放、透明度设置其文本,当然,如果它有一个背景图像,背景图像会随着文本变化。

补间动画通过XML或Android代码定义,建议使用XML文件定义,因为它更具有可读性、可重用性

Java类名XML关键字描述信息AlphaAnimationAlpha 放置在res/anim/目录下渐变透明度动画效果RotateAnimationRotate 放置在res/anim/目录下画面旋转动画效果ScaleAnimationScale放置在res/anim/目录下渐变尺寸伸缩动画效果TranslateAnimationtranslate放置在res/anim/目录下画面转换移动动画效果AnimationSetset 放置在res/anim/目录下一个持有其他动画元素aplha、scale、translate、rotate或者其他set元素的容器 2. 视图动画说明:

可以看出来Animation抽象类是所有补间动画的基类,所以基类会提供一些通用的动画属性方法,如下,我们可以详细的看看这些属性:

2.1.Animation属性详解 XML属性Java方法解释android:detachWallpapersetDetachWallpaper(boolean)是否在壁纸上运行android:durationsetDuration(long)动画持续时间、毫秒为单位android:fillAftersetFillAfter(boolean)控件动画结束时是否保持动画最后的状态android:fillBeforesetFillBefore(boolean)控件动画结束时是否保持动画开始的状态android:fillEnablesetFillEnable(boolean)与android:fillBefore效果相同android:interpolatorsetInterpolator(Interpolator)设定差值器(指定的动画效果,譬如回d等)android:repeatCountsetRepeatCount(int)重复次数android:repeatModesetRepeatModer(int)重复类型有两个值,reverse表示倒序排放,restart表示从头播放android:startOffsetsetStartOffset(long)调用start函数之后等待开始运行的时间,单位为毫秒android:zAdjustment(int)setZAdjustment(int)表示被设置动画的内容运行时在Z轴的位置(top / bottome / normal)默认为Normal

也就是说,无论我们补间动画的哪一种都已经具备了这种属性,也可以设置使用这些属性中的一个或多个

2.2 Alpha属性详解 XML属性Java方法解释android:fromAlphaAlphaAnimation(float fromAlpha,…)动画开始的透明度(0.0到1.0,0.0是全透明,1.0是不透明)android:toAlphaalphaAnimation(…,float toAlpha)动画结束的透明度(0.0到1.0,0.0是全透明,1.0是不透明) 2.3 Rotate属性详解 XML属性Java方法解释android:fromDegreesRotateAnimation(folat fromDegrees,…)旋转开始角度,正代表顺时针度数,负代表逆时针度数android:toDegreesRotateAnimation(…,folat toDegrees,…)旋转结束角度,正代表顺时针度数,负代表逆时针度数android:pivotXRotateAnimation(…, folat pivoX,…)缩放起点X坐标(数值、百分数、百分数P,譬如50表示以当前View左上角坐标加50px为初始点,50%表示以当前View宽高的50%做为起始点、50%p表示以当前View的左上角加上负空间宽高的50%做为初始点)android:pivotYRotateAnimation(…, folat pivoY,…)缩放起点Y坐标(数值、百分数、百分数P,譬如50表示以当前View左上角坐标加50px为初始点,50%表示以当前View宽高的50%做为起始点、50%p表示以当前View的左上角加上负空间宽高的50%做为初始点) 2.4 Scale属性详解 XML属性Java方法解释android:fromXScaleScaleAnimation(float fromX,…)初始化X轴缩放比例,1.0表示无变化android:toXScaleScaleAnimation(…,float toX,…)结束X轴缩放比例android:fromYScaleScaleAnimation(…,float fromY,…)初始化Y轴缩放比例,1.0表示无变化android:toYScaleScaleAnimation(…,float toY,…)结束Y轴缩放比例android:pivotXScaleAnimation(…, folat pivoX,…)缩放起点X坐标(数值、百分数、百分数P,譬如50表示以当前View左上角坐标加50px为初始点,50%表示以当前View宽高的50%做为起始点、50%p表示以当前View的左上角加上负空间宽高的50%做为初始点)android:pivotYScaleAnimation(…, folat pivoY,…)缩放起点Y坐标(数值、百分数、百分数P,譬如50表示以当前View左上角坐标加50px为初始点,50%表示以当前View宽高的50%做为起始点、50%p表示以当前View的左上角加上负空间宽高的50%做为初始点) 2.5 Translate属性详解 XML属性Java方法解释android:fromXDeltaTranlateAnimation(float fromXDelta,…)起点X坐标(数值、百分数、百分数P,譬如50表示以当前View左上角坐标加50px为初始点,50%表示以当前View宽高的50%做为起始点、50%p表示以当前View的左上角加上负空间宽高的50%做为初始点)android:fromYDeltaTranslateAnimation(…,float fromYDelta,…)起始点Y坐标,同上规律android:toXDeltaTranslateAnimation(…,float toXDelta,…)结束点坐标,同上规律android:toYDeltaTranslateAnimation(…,float toYDelta)结束点Y坐标,同上规律 2.6 AnimationSet属性详解

AnimationSet 继承自Animation,是上面四种的组合容器管理类,没有自己特有的属性,他的属性继承自Animation,所以特别注意,当我们对set标签使用Animation的属性时会对该标签下的所有子控件都产生影响

3. 视图动画使用方法

视图使用动画有两种,Java代码方式和xml方式

xml 方式


    
    
    
    

使用:

Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.anim);
img = (ImageView) findViewById(R.id.img);
img.startAnimation(animation);
Java代码方式

有时候,动画的属性值可能需要动态的调整,这个时候使用xml 就不合适了,需要使用java代码实现

//这里只演示旋转动画,其他平移,缩放等用法相同
animation = new RotateAnimation(-devalue, devalue, Animation.RELATIVE_TO_SELF,
                pxValue, Animation.RELATIVE_TO_SELF, pyValue);
        animation.setDuration(timevalue);

        if (keep.isChecked()) {
            animation.setFillAfter(true);
        } else {
            animation.setFillAfter(false);
        }
        if (loop.isChecked()) {
            animation.setRepeatCount(-1);
        } else {
            animation.setRepeatCount(0);
        }

        if (reverse.isChecked()) {
            animation.setRepeatMode(Animation.REVERSE);
        } else {
            animation.setRepeatMode(Animation.RESTART);
        }
        img.startAnimation(animation);
Animation实用方法介绍 Animation方法解释reset()重置Animation的初始化cancel()取消Animation动画start()开始Animation动画setAnimationListener(AnimationListener listener)给当前Animation设置动画监听hasStarted()判断当前Animation是否开始hasEnded()判断当前Animation是否结束

既然补间动画只能给View使用,那就看看View的几个常用方法

View类的常用动画 *** 作方法解释startAnimation(Animation animation)对当前View开始设置的Animation动画clearAnimation()取消当前View在执行的Animation动画 4. 视图动画注意事项

关于视图动画(补间动画)的例子很多。强调使用补间动画的如下一点:

重点注意:
补间动画执行之后并未改变View的真实布局属性值。切记这一点,譬如我们在activity中有一个Button在屏幕上方,我们设置了平移动画移动到屏幕下方然后保持动画最后执行状态呆在屏幕下方,这时如果点击屏幕下方动画执行之后的Button是没有任何反应的,而点击原来屏幕上方没有Button的地方却响应的是点击Button的事件。

5. 视图动画interpolator插值器详解

其实各种插值器都是实现了Interpolator接口而已,同时可以看见系统提供了许多已经实现OK的插值器

Java类XML ID值AccelerateDecelerateInterpolator@android:anim/accelerate_decelerate_interpolatorAccelerateInterpolator@android:anim/accelerate_interpolatorAnticipteInterpolator@android:anim/anticipate_interpolatorAnticipateOvershootInterpolator@android:anim/anticipate_overshoot_interpolatorBounceInterpolator@android:anim/bounce_interpolatorCycleInterpolator@android:anim/cycle_interpolatorDecelerateInterpolator@android:anim/decelerate_interpolatorOvershootInterpolator@android:anim/overshott_interpolatorPathInterpoltor 5.1插值器使用方法

插值器的使用比较简单,如下


 ...
 
5.2插值器的自定义

有时候会发现系统提供的插值器不够用,可能就像View一样需要自定义。关于插值器的自定义分为两种实现方式,xml自定义实现(其实就是对插值器的一些属性修改)或者Java代码实现方式

5.2.1 xml 自定义插值器的步骤
  1. 在res/anim/目录下创建filename.xml文件
  2. 准备自定义的插值器如下
    
    	
    /xml>	
    
  3. 在你的补间动画文件中引用此文件即可

可以看见上面第二步修改的是插值器的一些属性,但是有的插值器却不具备修改属性,具体如下:
< accelerateDecelerateInterpolator> 无自定义的attribute
< acceleraterInterpolator> android:factor浮点值,加速速率(默认值为1)
< anticipateInterploator> android:tension 浮点值,起始点后拉的张力数(默认值为2)
< anticipateOvershootInterpolator> android:tension 浮点值,起始点后的张力数(默认值为2),android:extraTension浮点值,拉力的倍数(默认值为1.5)
< bounceInterpolator>无可自定义的attribute
< cycleInterplolator> android:cycles整形,循环的个数(默认为1)
< decelerateInterpolator> andrid :factor浮点值,减速的速率(默认为1)
< linearInterpolator> 无可自定义的attribute
< overshootInterpolator> android:tension 浮点数,超出终点后的张力(默认值为2)

5.2.2 Java自定义插值器

所有的Interpolator都实现了Interpolator接口,而Interpolator接口又继承自TimeInterpolator,TimeInterPolator接口定义了一个float getInterpolation(float input);方法,这个方法是系统调用的,其中的参数input代表动画的时间,在0和1之间,也就是开始和结束之间。

二、帧动画(frame) 1.动画描述

Drawable动画其实就是帧动画,它允许你实现像播放幻灯片一样的效果,这种动画实质就是Drawable,所以这种动画的XML定义方式文件一般放在res/drawable/目录下

2. Drawable动画说明

我们依旧可以使用xml或者Java方式来实现帧动画,但是依旧推荐使用xml,具体方法如下:

< animation-list> 必须是跟节点, 包含一个或多个元素,属性有:

  • android:oneshot true 代表只执行一次,false循环执行
  • < item>类似一帧的动画资源

< item> animation-list 的子帧,包含属性有:

  • android:drawable 一个frame的Drawable资源
  • android:duration 一个frame显示多长时间
3. 动画的演示实例

关于帧动画的演示比较简单,大致如下:

<?xml version = 1.0 encoding="utf-8"?>

	

使用:

ImageView rocketImage = (ImageView)findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable)rockImage.getBackground():
rocketAnimationl.start();

需要注意的是,AnimationDrawable的start()方法不能在activity的onCreate方法中调用,因为AnimationDrawable还未有完全附着到window上,所以最好的调用时机是onWindowFocusChanged()方法中

三、属性动画(Propety Animation) 1.属性动画描述

android3.0 以后引入了属性动画,属性动画可以轻而易举的实现许多view动画做不到的事,譬如3D旋转一张图片。只需记住一点:属性动画的实现原理就是修改控件的属性值实现的动画

具体先看类下关系:

public abstract class Animator implements Cloneable {
	...
}

所有的属性动画的抽象基类就是它。其实现子类如:

Java类名xml关键字描述信息ValueAnimator< animation>放置在res/animator目录下在一个特定的时间里执行一个动画TimeAnimator不支持时序监听回调工具ObjectAnimator< objectAnimator> 防置在res/animator/目录下一个对象的一个属性动画AnimatorSet< set>放置在res/animator/目录下动画集合 2.属性动画说明 2.1android属性动画提供以下属性:
  • duration:动画的持续时间
  • TimeInterpolation:定义动画变化速率的接口,所有插值器都必须实现此接口,如线性、非线性插值器
  • Typeevaluator:用于定义属性值计算方式的接口,有int ,float,color类型,根据属性的起始、结束值和插值一起计算出当前时间的属性值
  • Animation sets:动画集合,即可以同时对一个对象应用多个动画,这些动画可以同时播放也可以对不同动画设置不同的延迟
  • frame refresh delay:多少时间刷新一次,即每隔多少时间计算一次属性值,默认10ms,最终刷新时间还受到系统进程调度与硬件的影响
  • Repeat country and behavoir:重复次数与方式,如播放3次、5次、无限循环,可以让次动画一直重复,或播放完时向反向播放。
2.2 XML方式属性动画

在xml中可以直接用的属性动画节点有: ValueAnimator、ObjectAnimator、AnimatorSet.


	
	
	

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4828749.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-10
下一篇 2022-11-10

发表评论

登录后才能评论

评论列表(0条)

保存