Android应用资源全面分析之四:专用动画资源

     专用动画资源是指除有动画效果的Drawable(详见博客文章《Android应用资源全面分析之三:Drawable资源》)外,Android提供的专门用于实现动画的资源,主要包括:补间动画(Tweened Animation)、属性动画(Property Animation)、转场动画(Transition Animation),它们分别定义在res/anim、res/animator和res/transition文件夹下,全部采用xml格式定义。

一、专用动画资源相关类及其结构

注解:1)图中红色字体表示抽象类

         2)图中括号中的数字标识该类第一次出现的Android API版本,没有数字标识的表示API版本为1或与父类相同版本

二、各种动画资源的定义
    1.补间动画(android.view.animation.Animation)    

      在res/anim下定义的视图动画文件,直接在View上实现动画效果。

      1)公共属性和方法

XML属性

对应Java方法

说明

android:duration

setDuration (long durationMillis)

设置动画持续时间,单位:milliseconds

android:interpolator

setInterpolator (Context context, int resID)

设置动画插值器

android:repeatCount

setRepeatCount (int repeatCount)

设置动画重复次数,0INFINITE

android:repeatMode

setRepeatMode (int repeatMode)

设置动画重复方式,RESTARTREVERSE

android:fillAfter

setFillAfter (boolean fillAfter)

true表示动画结束时停留在最后一帧,缺省值为false

android:fillBefore

setFillBefore (boolean fillBefore)

true表示动画开始前停留在第一帧,缺省值为true

android:fillEnabled

setFillEnabled (boolean fillEnabled)

true表示fillBefore有效,缺省值为false

android:startOffset

setStartOffset (long startOffset)

设置动画启动延迟时间,单位:milliseconds

      2)定义   

名称

XML定义

Java创建

AlphaAnimation

 <alpha

       android:fromAlpha="float"

       android:toAlpha="float" />

AlphaAnimation(float fromAlpha, float toAlpha)

ScaleAnimation

 <scale

        android:fromXScale="float"

        android:toXScale="float"

        android:fromYScale="float"

        android:toYScale="float"

        android:pivotX="float"

        android:pivotY="float" />

ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

TranslateAnimation

 <translate

        android:fromXDelta="float"

        android:toXDelta="float"

        android:fromYDelta="float"

        android:toYDelta="float" />

TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)

RotateAnimation

 <rotate

        android:fromDegrees="float"

        android:toDegrees="float"

        android:pivotX="float"

        android:pivotY="float" />

RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

AnimationSet

 <set   

   android:interpolator=

   "@[package:anim/interpolator_resource"

   android:shareInterpolator=["true" | "false"] >

    <....../>

 </set>

AnimationSet(boolean shareInterpolator)

addAnimation(Animation a)

    3)插值器(android.view.animation.BaseInterpolator

     对动画过程的快慢(变化率)进行定义,系统提供了下列十种插值器可供使用(也可以自定义)。他们都是BaseInterpolator的子类,提供不同的速度模型。


  4)布局动画(android.view.animation.LayoutAnimationController)

       为布局或视图组中的子视图提供统一的动画效果        

名称

XML定义

Java创建

Layout

AnimationController

 <layoutAnimation 

      android:animationOrder=

"[ORDER_NORMAL|

ORDER_RANDOM|

ORDER_REVERSE]"

       android:delay="float|fraction"

      android:interpolator="@anim/interpolaror_resource"

      android:animation="@anim/animation_resource"/>

LayoutAnimationController(Animation animation, float delay)

setOrder (int order)

 



setInterpolator (Interpolator interpolator)

setAnimation(Animation)

GridLayout

AnimationController

 <gridLayoutAnimation

       android:direction=

"[DIRECTION_BOTTOM_TO_TOP|

DIRECTION_TOP_TO_BOTTOM|

DIRECTION_RIGHT_TO_LEFT|

DIRECTION_LEFT_TO_RIGHT]"

       android:directionPriority=

"[PRIORITY_ROW|

PRIORITY_COLUMN|

PRIORITY_NONE]"

       android:rowDelay="float|fraction"          

       android:columnDelay="float|fraction" />

GridLayoutAnimationController(Animation animation, float columnDelay, float rowDelay)

setDirection (int direction)

 

 

 

setDirectionPriority (int directionPriority)

 

 

 

setRowDelay (float rowDelay)

setColumnDelay (float columnDelay)

2.属性动画(android.animation.Animator

名称

XML定义

Java创建

ValueAnimator

<animator

        android:duration="int"

        android:valueFrom="float | int | color"

        android:valueTo="float | int | color"

        android:startOffset="int"

        android:repeatCount="int"

        android:repeatMode=["repeat" | "reverse"]

        android:valueType=["intType" | "floatType"]/>

 

ofInt(int... values)/ofFloat(float... values)/ofArgb(int... values)

ofObject(TypeEvaluator evaluator, Object... values)

ofPropertyValuesHolder(PropertyValuesHolder... values)

addUpdateListener(ValueAnimator.AnimatorUpdateListener listener)

 

setDuration(long duration)

setStartDelay(long startDelay)

setRepeatCount(int value)

setRepeatMode(int value)

setInterpolator(TimeInterpolator value)

 

start()/reverse()/pause()/resume()/cancel()/end()

ObjectAnimator

<objectAnimator

        android:propertyName="string"

         android:duration="int"

        android:valueFrom="float | int | color"

        android:valueTo="float | int | color"

        android:startOffset="int"

        android:repeatCount="int"

        android:repeatMode=["repeat" | "reverse"]

        android:valueType=["intType" | "floatType"]/>

ofInt(Object  target, String propertyName, int... values)

ofFloat(Object  target, String propertyName, float... values)

ofArgb(Object  target, String propertyName, int... values)

ofObject(Object  target, String propertyName, TypeEvaluator evaluator, Object... values)

ofPropertyValuesHolder(Object  target, PropertyValuesHolder... values)

 

ObjectAnimator()

setIntValues(int... values)/setFloatValues(float... values)

setObjectValues(Object... values)/setPropertyName(String propertyName)

setTarget(Object  target)

 

start()

AnimatorSet

<set

  android:ordering=["together" | "sequentially"]>

  <....../>

</set>

AnimatorSet()

playTogether(Animator... items)

playSequentially(Animator... items)

 

start()/reverse()/pause()/resume()/cancel()/end()

 

play(animator1).with(nimator2)

.before(nimator3).after(nimator4)

3.转场动画(android.transition.Transition)

名称

XML定义

Java创建

Transition公共

 <transition_name

        android:duration="float"

        android:interpolator="@anim/my_interpolator" 

         android:startDelay="float"

        <targets>
             <target android:targetId="@id/view"/>

             <target android:targetName="transionName"/>

             <target android:targetClass="android.view.class"/>

 

             <target android:excludeId="@id/view"/>

             <target android:excludeName="transionName"/>

             <target android:excludeClass="android.view.class"/>

        </targets>

</transition_name>

 

setDuration (long duration)

setInterpolator (TimeInterpolator interpolator)

setStartDelay (long startDelay)

 

addTarget (int targetId)

addTarget (String targetName)

addTarget (Class targetType)

addTarget(View target)

excludeTaget(int targetId, boolean exclude)

excludeTarget (String targetName, boolean exclude)

excludeTarget (Class type, boolean exclude)

excludeTarget(View target, boolean exclude)

Visibility公共

 <visibility_name

    android:transitionVisibilityMode="[MODE_IN|

                                                    MODE_OUT]" />

 

setMode (int mode)

Slide(Visiblity)

 <slide

      android:slideEdge=" Gravity.LEFT| Gravity.TOP|

                              Gravity.RIGHT|Gravity.BOTTOM|

                                        Gravity.START| Gravity.END" />

Slide ()/Slide (int slideEdge)

setSlideEdge (int slideEdge)

Explode((Visiblity)

 <explode

     ......       

        />

Explode ()

Fade(Visiblity)

 <fade

     ......  

        />

Fade()

Fade(int fadingMode)

IN/OUT

ChangeBounds

 <changeBounds

        android:resizeClip="[true|false]" />

ChangeBounds()

setResizeClip(boolean resizeClip),缺省值为false

ChangeTransform

 <changeTransform

       android:reparent="[true|false]"

       android:reparentWithOverlay="[true|false]" />

ChangeTransform()

setReparent(boolean reparent)

setReparentWithOverlay(boolean reparentWithOverlay)

ChangeClipBounds

 <changClipBounds

      ......  

/>

ChangeClipBounds()

ChangeImage

Transform

<changeImageTransform     

      ......  

/>

ChangeImageTransform()

ChangeScroll

 <changeScroll

       ......  

/>

ChangeScroll()

TransitionSet

<transitionSet

         android:transitionOrdering="sequential|together">

        < ...... />

</transitionSet>

TransitionSet()

setOrdering(int ordering)

ORDERING_SEQUENTIAL/ORDERING_TOGETHER

 

addTransition(Transition transition)

TransitionManager

 <transitionManager

     <transition 

android:fromScene="@layout/lscene1_layout

android:toScene="@layout/scene2_layout"

android:transition="@transition/my_transition/>

      ......  

/transitionManager>

N/A

三、各种动画资源的引用

位置

名称

XML引用

Java引用

res/anim

Animation

@anim/anim_file

例如:

android:animation="@anim/my_anim"

android:inAnimation="@anim/my_anim"

android:outAnimation="@anim/my_anim"

AnimationUtils.loadAnimation(context, R.anim.anim_file)

mView.startAnimation(mAnimation)

mView.clearAnimation()

 

mViewAnimator.setInAnimation(mAnimatio)

mViewAnimator.setInAnimation(context,R.anim.my_anim)

mViewAnimator.setOutAnimation(mAnimatiot)

mViewAnimator.setOutAnimation(context,R.anim.my_anim)

 

ActivityOptions.makeCustomAnimation(context, R.anim.anim_file_1, R.anim.anim_file_2)

overridePendingTransition(R.anim.anim_file_1,R.anim.anim_file_2)

res/anim

Interpolator

@anim/interpolator_file

例如:

android:interpolator="@anim/my_interpolator"

mAnimation.setInterpolator(context,R.anim.interpolator_file)

res/anim

Layout

Animation

Controller

@anim/layoutanim_file

例如:

android:layoutAnimation="@anim/my_layoutanimation"

AnimationUtils.loadAnimation(context, R.anim.layoutanim_file)

mViewgroup.setLayoutAnimation(mLayoutAnimation)

res/animator

Animator

@animator/animator_file

例如:

android:animation="@animator/my_animator"

android:inAnimation="@animator/my_animator"

android:outAnimation="@animator/my_animator"

 

AnimatorInflater.loadAnimator(context,R.animator.animator_file)

mAdapterViewFlipper.setInAnimation(mAnimator)

mAdapterViewFlipper.setInAnimation(context,R.animator.my_animator)

mAdapterViewFlipper.setOutAnimation(mAnimator)

mAdapterViewFlipper.setOutAnimation(context,R.animator.my_animator)

 

mLayoutTransition.setAnimator(transition_type, mAnimator)

 

getFragmentManager().setCustomAnimations(

     R.animator.a1, R.animatora2,R.animator.a3,R.animator.a4)

 

mStateListAnimator.addState (specs,  mAnimator)

res/transition

Transition

@transition/trans_file

例如

<item name=

"android:windowEnterTransition">@transition/trans_file</item>

 

android:transition="@transition/trans_file"

TransitionInflater transitionInflater = TransitionInflater.from(context)

transitionInflater.inflateTransition(R.transition.trans_file)

getWindow().setEnterTransition(mTransition)

getWindow().setSharedElementEnterTransition(mTransition)

 

TansitionManager.go(Scene scene, Transition transition)

TansitionManager.beginDelayedTransition(final ViewGroup sceneRoot, Transition transition)

 

res/transition

Transition

Manager

N/A

transitionInflater.inflateTransitionManager(R.transition.trm_file, sceneRoot)

transitionTo(Scene scene)

setTransition(Scene scene, Transition transition)

setTransition(Scene fromScene, Scene toScene, Transition transition)

四、Android系统自带动画资源一览表

名称

XML引用

Java引用

Animation

@android:anim/fade_in

@android:anim/fade_out

@android:anim/slide_in_left

@android:anim/slide_out_right

AnimationUtils.loadAnimation(context, android.R.anim.fade_in)

AnimationUtils.loadAnimation(context, android.R.anim.fade_out)

AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left)

AnimationUtils.loadAnimation(context, android.R.anim.slide_out_right)

Interpolator

@android:anim/accelerate_decelerate_interpolator

@android:anim/accelerate_interpolator

@android:anim/anticipate_interpolator

@android:anim/anticipate_overshoot_interpolator

@android:anim/bounce_interpolator

@android:anim/cycle_interpolator

@android:anim/decelerate_interpolator

@android:anim/linear_interpolator

@android:anim/overshoot_interpolator

 

@android:interpolator/accelerate_cubic

@android:interpolator/accelerate_decelerate

@android:interpolator/accelerate_quad

@android:interpolator/accelerate_quint

@android:interpolator/anticipate

@android:interpolator/anticipate_overshoot

@android:interpolator/bounce

@android:interpolator/cycle

@android:interpolator/decelerate_cubic

@android:interpolator/decelerate_quad

@android:interpolator/decelerate_quint

@android:interpolator/fast_out_extra_slow_in

@android:interpolator/fast_out_linear_in

@android:interpolator/fast_out_slow_in

@android:interpolator/linear

@android:interpolator/linear_out_slow_in

@android:interpolator/overshoot

AnimationUtils.loadInterpolator(context, android.R.anim.xxx)

 

 

 

 

 

 

 

 

 

AnimationUtils.loadInterpolator(context,android.R.interpolator.xxx)

 

Transition

@android:transition/no_transition

@android:transition/explode

@android:transition/fade

@android:transition/move

@android:transition/slide_bottom

@android:transition/slide_top

@android:transition/slide_left

@android:transition/slide_right

TransitionInflater transitionInflater = TransitionInflater.from(context)

transitionInflater.inflateTransition(android.R.transition.xxx)

五、示例



专用动画资源演示清单

<alpha>......</alpha>

<scale>......</scale>

<translate>......</translate>

<rotate>......</rotate>

<set>......</set>


 

<animator>......</animator>

<objectAnimator>......</objectAnimator>

<set>......</set>

<layoutAnimation>......</layoutAnimation>

<gridLayoutAnimation>......</gridLayoutAnimation>

 

 

<slide>......</slide>

<fade>......</fade>

<explode>......</explode>

<changeBounds>......</changeBounds>

<changeTransform>......</changeTransform>

<changeClipBounds>......</changeClipBounds>

<changeImageTransform>......</changeImageTransform>

<changeScroll>......</changeScroll>

<transitionSet>......</transitionSet>





<transitionManager>......</transitionManager>

 

 

六、Demo源码

      Resource Demo是将所有Android资源集合在一起,对其定义、引用和应用进行充分完全的演示,包括上述演示的全部内容。此Demo提供了详细的注释和说明,不仅可供学习时使用,也可作为模版在开发中直接使用(拷贝需要的代码段即可),以加快开发进度。该Demo在Android Studio 3.0 和Android SDK5.0以上版本可直接运行,欢迎索取使用。有需要者请发邮件到:xottys@163.com 即可。


建议直接下载安装APK: Android ResourceDemo ,演示效果会更好。该APK可在Android5.0以上版本正常运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值