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

Android帧动画、补间动画、属性动画用法详解,第1张

概述在安卓开发中,经常会使用到一些动画,那么在开发中,如何使用这些动画呢?

在安卓开发中,经常会使用到一些动画,那么在开发中,如何使用这些动画呢?

帧动画:不是针对VIEw做出一些形状上的变化,而是用于播放一张张的图片,例如一些开机动画,类似于电影播放,使用的是AnimationDrawable来播放帧动画
res/drawable 

<?xml version="1.0" enCoding="utf-8"?> <animation-List xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:oneshot="true"   >      <item androID:drawable="@drawable/g1" androID:duration="200"></item>   <item androID:drawable="@drawable/g2" androID:duration="200"></item>   <item androID:drawable="@drawable/g3" androID:duration="200"></item>   <item androID:drawable="@drawable/g4" androID:duration="200"></item>   <item androID:drawable="@drawable/g5" androID:duration="200"></item>  </animation-List> 
ImageVIEw iv = (ImageVIEw) findVIEwByID(R.ID.iv); iv.setBackgroundDrawable(getResources().getDrawable(R.drawable.frame_anim));      AnimationDrawable animationDrawable = (AnimationDrawable) iv.getBackground();      //设置是否只执行一次 //animationDrawable.setoneshot(false);      animationDrawable.start(); 

补间动画(VIEw动画):如果VIEw只做一些动画,并不对VIEw做点击或触控的一些 *** 作,可以使用补间动画,因为VIEw动画,并不会改变VIEw的位置,只是做一些渲染。VIEw动画的四种变换效果对应着Animation的四个子类:TranslateAnimation、ScaleAnimation、RotateAnimation、AlphaAnimation.

// 以vIEw中心为缩放点,由初始状态缩小到看不间在返回到看见     ScaleAnimation animation = new ScaleAnimation(         1.0f,0.0f,//一点点变小直到看不见为止         1.0f,Animation.relative_TO_SELF,0.5f,0.5f//中间缩放     );     animation.setDuration(BUBBLE_ENTER_CENTER_SCALE_TIME);     animation.setRepeatMode(Animation.REVERSE);     animation.setRepeatCount(1);     animation.setAnimationListener(new Animation.AnimationListener() {       @OverrIDe       public voID onAnimationStart(Animation animation) {       }        @OverrIDe       public voID onAnimationEnd(Animation animation) {          homingBubbleVIEw(true,position,vIEw,current,endratioFrame);       }        @OverrIDe       public voID onAnimationRepeat(Animation animation) {       }     });     vIEw.startAnimation(animation); 

属性动画:API11新特性,如果对VIEw不仅做一些动画 *** 作,也对VIEw做一些点击触摸的 *** 作,可以使用属性动画,因为属性动画会改变VIEw的位置。属性动画类有ValueAnimator、ObjectAnimator、AnimatorSet。

下面就来介绍一下两个属性动画

ValueAnimator值动画,它并不是用于对VIEw做一些动画,它仅仅是用于两个值之间的一个过度的动画(按照时间将两个差值平分,然后根据时间来一点点的往上加),系统提供了一些ValueAnimator.ofInt()、ValueAnimator.offloat()用于整型和浮点型的两只之间的过度动画,如果两个值是自己自定义的类型该怎么办呢?安卓提供了一个ValueAnimator.ofObject()方法,其中一个参数是TypeEvaluator类型(类型估算器),TypeEvaluator是一个接口,给开发者的一个扩展,接口中有一个public Object evaluate(float fraction,Object startValue,Object endValue) 方法,该方法会在ValueAnimator动画期间不断的调用,fraction是0-1之间的变化率,startValue是(自定义类型的)开始值,endValue是(自定义类型的)结束值,返回类型就是自定义的类型,可以根据自己的需求来自行计算期间的值该如何变化(如可以是运行轨迹)

public class floatEvaluator implements TypeEvaluator {    public Object evaluate(float fraction,Object endValue) {      float startfloat = ((Number) startValue).floatValue();      return startfloat + fraction * (((Number) endValue).floatValue() - startfloat);    }    

使用

ValueAnimator mAnimatorEnetr = ValueAnimator.ofObject(new floatEvaluator(getContext()),10);       mAnimatorEnetr.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {         @OverrIDe         public voID onAnimationUpdate(ValueAnimator animation) {           (float) animation.getAnimatedValue();//这里就是返回不断变化的值                    }       });       mAnimatorEnetr.setDuration(1000);       mAnimatorEnetr.addListener(new Animator.AnimatorListener() {         @OverrIDe         public voID onAnimationStart(Animator animation) {          }          @OverrIDe         public voID onAnimationEnd(Animator animation) {                    }          @OverrIDe         public voID onAnimationCancel(Animator animation) {          }          @OverrIDe         public voID onAnimationRepeat(Animator animation) {          }       });       mAnimatorEnetr.start(); 

ObjectAnimator动画,它是针对vIEw来做一些属性上值得变化,它不仅在值上有一个过度的变化,而且还会将变化的值设置到所要改变的属性上,让其产生动画的效果
ObjectAnimator.ofInt(vIEw,"translationX",10,20).setDuration(100).start(); 参数vIEw是要产生动画的vIEw,"translationX"属性,后面的参数是变化的区间
ObjectAnimator做属性动画的时候,并不会改变vIEw的left,top,right,bottom值,它改变的只是translationX和translationY的值,这些参数值的关系是 x = left + translationX  , y = top + translationY。在平移过程中,只会改变x 和translationX,y和translatioinY的值。其中x和y是VIEw左上角的坐标。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android帧动画、补间动画、属性动画用法详解全部内容,希望文章能够帮你解决Android帧动画、补间动画、属性动画用法详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址: http://outofmemory.cn/web/1147780.html

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

发表评论

登录后才能评论

评论列表(0条)

保存