关闭

android动画

标签: Animation
537人阅读 评论(0) 收藏 举报
分类:

基础内容

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>
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38122次
    • 积分:521
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:3篇
    • 译文:0篇
    • 评论:8条
    最新评论