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

 更新时间:2020年09月25日 08:26:31   作者:cj_286  
安卓的三种动画,帧动画,补间动画,属性动画,大家了解多少,知道如何使用吗?本文就为大家简单介绍Android帧动画、补间动画、属性动画的使用方法,需要的朋友可以参考下

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

帧动画:不是针对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, 0.0f, 
  Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 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 startValue, Object endValue) { 
 float startFloat = ((Number) startValue).floatValue(); 
 return startFloat + fraction * (((Number) endValue).floatValue() - startFloat); 
 } 

使用

ValueAnimator mAnimatorEnetr = ValueAnimator.ofObject(new FloatEvaluator(getContext()), 0,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依赖注入框架Dagger2的使用方法

    Android依赖注入框架Dagger2的使用方法

    Dagger2是一款基于Java的依赖注入框架,可以帮助Android开发者管理和组织应用的依赖关系。通过使用注解和代码生成技术,可以实现自动化的依赖注入,减少手动编写代码的工作量
    2023-05-05
  • Android绘制钟表的方法

    Android绘制钟表的方法

    这篇文章主要为大家详细介绍了Android绘制钟表的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • Android实现网页图片浏览功能

    Android实现网页图片浏览功能

    这篇文章主要为大家详细介绍了Android实现网页图片浏览功能,输入图片的url然后点击按钮加载出来图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Android视图绑定viewBinding的使用介绍

    Android视图绑定viewBinding的使用介绍

    最近这段时间在学习Kotlin,突然发现谷歌已经把kotlin-android-extensions插件废弃,目前推荐使用ViewBinding来进行替代,接下来通过本文给大家分享Android使用ViewBinding的详细步骤,感兴趣的朋友一起学习吧
    2023-01-01
  • Android 图片保存到相册不显示的解决方案(兼容Android 10及更高版本)

    Android 图片保存到相册不显示的解决方案(兼容Android 10及更高版本)

    这篇文章主要介绍了Android 图片保存到系统相册不显示的解决方案,帮助大家更好的理解和学习使用Android开发,感兴趣的朋友可以了解下
    2021-04-04
  • Flutter给控件实现钻石般的微光特效

    Flutter给控件实现钻石般的微光特效

    这篇文章主要给大家介绍了关于Flutter给控件实现钻石般的微光特效的相关资料,实现的效果非常不错,非常适合大家做开发的时候参考,需要的朋友可以参考下
    2021-08-08
  • Android RecyclerView基本使用详解

    Android RecyclerView基本使用详解

    这篇文章主要为大家详细介绍了Android RecyclerView基本使用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Android BaseAdapter应用实例

    Android BaseAdapter应用实例

    这篇文章主要介绍了Android BaseAdapter应用方法,结合生成联系人Items的实例形式分析了BaseAdapter的使用技巧,需要的朋友可以参考下
    2016-01-01
  • Flutter加载图片的多样玩法汇总

    Flutter加载图片的多样玩法汇总

    flutter一般分为两种图片加载的方式:网络加载和本地加载,下面这篇文章主要给大家介绍了关于Flutter加载图片的多样玩法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • Android实现两个数相加功能

    Android实现两个数相加功能

    这篇文章主要为大家详细介绍了Android实现两个数相加功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03

最新评论