android动画

原创 2013年12月03日 14:04:56

基础内容

android提供了4种基本的动画,移位-translate ,渐变-alpha,缩放-scale ,旋转-rotate。

在xml资源下res/anim目录下新建动画文件xml,类型是set。

有如下动画插入效果:

AccelerateDecelerateInterpolator   先加速再减速 
AccelerateInterpolator  加速 
AnticipateInterpolator  先回退一小步,然后再迅速前进 
AnticipateOvershootInterpolator  先回退一小步,然后再迅速前进,在超过右边界一小步 
BounceInterpolator  实现弹球效果 
CycleInterpolator   周期运动 
DecelerateInterpolator 减速 
LinearInterpolator 匀速 
OvershootInterpolator  快速前进到右边界上,再往外突出一小步 

如何使用XML中的动画效果:Animation myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_action);

如何在Java代码中定义动画:

//在代码中定义 动画实例对象
private Animation myAnimation_Alpha;
private Animation myAnimation_Scale;
private Animation myAnimation_Translate;
private Animation myAnimation_Rotate;
    //根据各自的构造方法来初始化一个实例对象
myAnimation_Alpha = new AlphaAnimation(0.1f, 1.0f);
myAnimation_Scale = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
             Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
myAnimation_Translate = new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
myAnimation_Rotate = new RotateAnimation(0.0f, +350.0f,
               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
//RotateAnimation:
RotateAnimation(float fromDegrees, float toDegrees, 
            int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
//第一个参数fromDegrees为动画起始时的旋转角度    
//第二个参数toDegrees为动画旋转到的角度   
//第三个参数pivotXType为动画在X轴相对于物件位置类型  
//第四个参数pivotXValue为动画相对于物件的X坐标的开始位置
//第五个参数pivotXType为动部分api:   
//第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置
myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
如何使用Java代码中的动画效果
部分api:
startAnimation (Animation animation)
animation.isRunning()
animation.stop()
animation.start() 

逐帧动画

逐帧动画由一串连续的图片组成,通过xml来定义。
<animation-list    
    xmlns:android="http://schemas.android.com/apk/res/android"   
    android:oneshot="false">    
<item android:drawable="@drawable/qq001" android:duration="80"/>    
<item android:drawable="@drawable/qq002" android:duration="80"/>    
<item android:drawable="@drawable/qq003" android:duration="80"/>    
<item android:drawable="@drawable/qq004" android:duration="80"/>    
<item android:drawable="@drawable/qq005" android:duration="80"/>    
<item android:drawable="@drawable/qq006" android:duration="80"/>    
<item android:drawable="@drawable/qq007" android:duration="80"/>    
<item android:drawable="@drawable/qq008" android:duration="80"/>    
</animation-list>  
可以将drawable以background或者src来使用,在代码里通过如下方式来获取引用并操作。
animationIV = (ImageView) findViewById(R.id.animationIV); 

  animationIV.setImageResource(R.drawable.animation1);  
  animationDrawable = (AnimationDrawable) animationIV.getDrawable();  
  animationDrawable.start(); 
或者是animationDrawable = (AnimationDrawable) animationIV.getBackground();

多个动画的衔接

<translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
        android:fromXDelta="0" android:toXDelta="200"   
        android:fillAfter="true"  
        android:duration="@android:integer/config_longAnimTime" />  
          
        <translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
        android:fromYDelta="0" android:toYDelta="300"   
        <span style="color: #ff0000;"> android:startOffset="@android:integer/config_longAnimTime" </span>  
  
                android:duration="@android:integer/config_longAnimTime" />  
有两段动画,第一个是从左向右平移,第二个是从上往下平移。或者是以下这种比较复杂的效果
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false">  
    <scale   
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
        android:fromXScale="1.0"   
        android:toXScale="1.4"   
        android:fromYScale="1.0"   
        android:toYScale="0.6"   
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:fillAfter="false"  
        android:duration="700" />  
    <set   
        android:interpolator="@android:anim/accelerate_interpolator"  
                android:startOffset="700">  
          
        <scale  
            android:fromXScale="1.4"   
            android:toXScale="0.0"  
                android:fromYScale="0.6"  
            android:toYScale="0.0"   
            android:pivotX="50%"   
            android:pivotY="50%"   
            android:duration="400" />  
          
        <rotate   
            android:fromDegrees="0"   
            android:toDegrees="-45"  
            android:toYScale="0.0"   
            android:pivotX="50%"   
            android:pivotY="50%"  
            android:duration="400" />  
    </set>  
</set>
类似这种嵌套能实现动画的连续,或者在代码里监听前一个动画的结束,然后播放下一个动画。

使用style来定义动画

<style name="Theme.Test" parent="@android:style/Theme.Light.NoTitleBar">
	<item name="android:windowAnimationStyle">@style/Animation.Activity.Test</item>
</style>
<style name="Animation.Activity.Test" parent="@android:style/Animation.Activity">
	<item name="android:activityOpenEnterAnimation">@anim/activity_open_enter</item>
    <item name="android:activityOpenExitAnimation">@anim/activity_open_exit</item>
    <item name="android:activityCloseEnterAnimation">@anim/activity_close_enter</item>
    <item name="android:activityCloseExitAnimation">@anim/activity_close_exit</item>
	
	<item name="android:taskOpenEnterAnimation">@anim/activity_open_enter</item>
	<item name="android:taskOpenExitAnimation">@anim/activity_open_exit</item>
	<item name="android:taskCloseEnterAnimation">@anim/activity_close_enter</item>
	<item name="android:taskCloseExitAnimation">@anim/activity_close_exit</item>
	
	<item name="android:taskToFrontEnterAnimation">@anim/activity_open_enter</item>
	<item name="android:taskToFrontExitAnimation">@anim/activity_open_exit</item>
	<item name="android:taskToBackEnterAnimation">@anim/activity_close_enter</item>
	<item name="android:taskToBackExitAnimation">@anim/activity_close_exit</item>
</style> 只要这样进行配置,那边Activity之间的切换动画都可以进行自定义了
注意,这个style资源文件如果放在application的manifest里编译,那么这个style适用于这个应用,对其他没影响。如果想作用于全局,可以修改frameworks/base/core/res/res/values/styles文件实现需要的效果。
例子,修改dialog的弹出方式为从下向上弹出。
先在styles.xml里添加咱们的style项:
<style name="mystyle" parent="android:Animation">
        <item name="@android:windowEnterAnimation">@anim/dialog_animation</item>  //进入时的动画
        <item name="@android:windowExitAnimation">@anim/dialog_animation_exit</item>    //退出时的动画
    </style>
然后在代码里使用style样式:
Window window = mDialog.getWindow();
		window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
		window.setWindowAnimations(R.style.mystyle);
至于动画就看你发挥了,随意尝试:
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android">  
    <alpha  
    android:fromAlpha="0.0"   
    android:toAlpha="1.0"  
    android:duration="500" />  
    <translate
        android:toYDelta="100%p"
        android:duration="500"
        />
</set>

Android自定义加载动画(持续更新中...)

准备做一个Android自定义加载动画的合集,主要通过自定义View实现一些常见的加载动画,也会模仿一些主流APP好看的加载动画。项目源码同步上传到了个人github上,欢迎大家star,fork,提...
  • tyk0910
  • tyk0910
  • 2016年12月16日 10:37
  • 8332

Android开发笔记(十四)圆弧进度动画CircleAnimation

一个好看的APP,都有不少精致的动画效果。熟练运用各种动画技术,可让我们的APP灼灼生辉。Android在技术上把动画分为了三类,分别是帧动画FrameAnimation、补间动画TweenAnima...
  • aqi00
  • aqi00
  • 2015年12月10日 15:20
  • 3593

Android动画——逐帧动画

1、概述 Android提供了几种动画类型:View Animation 、Drawable Animation 、Property Animation 。View Animation相当简单,可以支...
  • xuemengrui12
  • xuemengrui12
  • 2016年08月30日 13:27
  • 1302

Android翻页动画效果完整实例代码

  • 2018年01月12日 01:06
  • 9.81MB
  • 下载

Android项目源码BaseAnimation数百种动画效果集合

  • 2018年01月05日 19:10
  • 65B
  • 下载

Android例子源码可以无限轮播的帧动画

  • 2018年01月05日 19:27
  • 65B
  • 下载

android动画集

  • 2017年12月25日 17:05
  • 33.1MB
  • 下载

Android翻页动画效果完整实例代码

  • 2017年12月08日 02:25
  • 9.79MB
  • 下载

Android属性动画

  • 2017年11月20日 17:54
  • 26.17MB
  • 下载

干货 _ Android高级动画

  • 2017年12月01日 21:54
  • 8.29MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android动画
举报原因:
原因补充:

(最多只允许输入30个字)