安卓 动画小结

  • 补间动画(Tween Animation)

a. 渐变动画支持四种类型:平移(Translate)、旋转(Rotate)、缩放(Scale)、不透明度(Alpha)。

b. 只是显示的位置变动,View的实际位置未改变,表现为View移动到其他地方,点击事件仍在原处才能响应。

c. 组合使用步骤较复杂。

d. View Animation 也是指此动画。

  • 帧动画(Frame Animation)

a. 用于生成连续的Gif效果图。

b. DrawableAnimation也是指此动画。

  • 属性动画(Property Animation)

a. 支持对所有View能更新的属性的动画(需要属性的setXxx()和getXxx())。

b. 更改的是View实际的属性,所以不会影响其在动画执行后所在位置的正常使用。

逐帧动画 frame_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >
    <!-- android:oneshot="false" 表示不循环播放 -->
    <item
        android:drawable="@drawable/ni"
        android:duration="500"/>
    <item
        android:drawable="@drawable/hao"
        android:duration="500"/>
    <item
        android:drawable="@drawable/huan"
        android:duration="500"/>
    <item
        android:drawable="@drawable/yin"
        android:duration="500"/>
    <item
        android:drawable="@drawable/lai"
        android:duration="500"/>
    <item
        android:drawable="@drawable/dao"
        android:duration="500"/>
    <item
        android:drawable="@drawable/wo"
        android:duration="500"/>
    <item
        android:drawable="@drawable/de"
        android:duration="500"/>
    <item
        android:drawable="@drawable/bo"
        android:duration="500"/>
    <item
        android:drawable="@drawable/ke"
        android:duration="500"/>

</animation-list>

java中代码

//anim的backgroud="@anim/frame_anim"
final ImageView anim = (ImageView) findViewById(R.id.anim);
final AnimationDrawable animation = (AnimationDrawable) anim
				.getBackground();
				
animation.start();
animation.stop();

http://download.csdn.net/download/qq_26972449/9373567参考例子

补间动画 透明

<alpha   xmlns:android="http://schemas.android.com/apk/res/android"   
    android:fromAlpha="0.1"     
    android:toAlpha="1.0"     
    android:duration="1000"  
    />
fromAlpha 属性为动画起始时透明度
toAlpha   属性为动画结束时透明度      
0.0  表示完全透明
1.0  表示完全不透明
duration  属性为动画持续时间  时间以毫秒为单位

java代码

AnimationalphaAnimation=new AlphaAnimation(1, (float) 0.1);
alphaAnimation.setDuration(3000);//设置动画持续时间为3秒
alphaAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
imgShow.startAnimation(alphaAnimation);

AnimationalphaAnimation2=AnimationUtils.loadAnimation(this, R.anim.alpha);//加载Xml文件中的动画
imgShow.startAnimation(alphaAnimation2);

旋转

<rotate      
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"     
    android:fromDegrees="0"     
    android:toDegrees="+350"             
    android:pivotX="50%"     
    android:pivotY="50%"         
    android:duration="3000" />   

    <!-- rotate 旋转动画效果属性:
interpolator 指定一个动画的插入器   
accelerate_decelerate_interpolator   加速-减速动画插入器
accelerate_interpolator              加速-动画插入器
decelerate_interpolator              减速-动画插入器
fromDegrees 属性为动画起始时物件的角度
toDegrees   属性为动画结束时物件旋转的角度
可以大于360度
说明:      
当角度为负数——表示逆时针旋转
当角度为正数——表示顺时针旋转
(负数from——to正数:顺时针旋转)       
(负数from——to负数:逆时针旋转)     
(正数from——to正数:顺时针旋转)      
(正数from——to负数:逆时针旋转)           
pivotX     属性为动画相对于物件的X坐标的开始位置
pivotY     属性为动画相对于物件的Y坐标的开始位置
说明:        以上两个属性值从0%-100%中取值50%为物件的X或Y方向坐标上的中点位置
长整型值:duration  属性为动画持续时间 时间以毫秒为单位-->

java代码

AnimationrotateAnimation=new RotateAnimation(0, 45);
rotateAnimation.setDuration(3000);//设置动画持续时间为3秒
rotateAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
imgShow.startAnimation(rotateAnimation);
myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);

缩放

<?xml version="1.0" encoding="utf-8"?>      
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    >
<!-- 尺寸伸缩动画效果scale      
属性:interpolator 指定一个动画的插入器  
accelerate_decelerate_interpolator  加速-减速 动画插入器
accelerate_interpolator        加速- 动画插入器
decelerate_interpolator        减速- 动画插入器
其他的属于特定的动画效果
浮点型值:fromXScale 属性为动画起始时X坐标上的伸缩尺寸
toXScale   属性为动画结束时X坐标上的伸缩尺寸
fromYScale 属性为动画起始时Y坐标上的伸缩尺寸
toYScale   属性为动画结束时Y坐标上的伸缩尺寸
startOffset  属性为从上次动画停多少时间开始执行下个动画
说明:      以上四种属性值
0.0表示收缩到没有
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大
pivotX     属性为动画相对于物件的X坐标的开始位置
pivotY     属性为动画相对于物件的Y坐标的开始位置
说明:      
以上两个属性值从0%-100%中取值50%为物件的X或Y方向坐标上的中点位置
长整型值:duration  属性为动画持续时间 时间以毫秒为单位
布尔型值: fillAfter 属性当设置为true ,该动画转化在动画结束后被应用
-->

<scale       
android:interpolator="@android:anim/accelerate_decelerate_interpolator"     
android:fromXScale="1"     
android:toXScale="1"     
android:fromYScale="0"     
android:toYScale="1"      
android:pivotX="0"     
android:pivotY="1"  
android:startOffset="1"    
android:duration="700" />     
</set>

java 代码

Animationscale Animation=new ScaleAnimation(0.5f, 1.0f,1.0f, 1.0f);
scaleAnimation.setDuration(2000);//设置动画持续时间为3秒
scaleAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
scaleAnimation.setRepeatCount(3);
imgShow.startAnimation(scaleAnimation);
myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
             Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

移动

<?xml version="1.0" encoding="utf-8"?>
<!-- translate 
整型值:      
fromXDelta 属性为动画起始时X坐标上的位置
toXDelta   属性为动画结束时X坐标上的位置
fromYDelta 属性为动画起始时Y坐标上的位置
toYDelta   属性为动画结束时Y坐标上的位置
注意:      
没有指定fromXType toXType from YType toYType 时候,默认是以自己为相对参照物长整型值:
duration  属性为动画持续时间
说明:时间以毫秒为单位-->     
<translate   xmlns:android="http://schemas.android.com/apk/res/android"  
 android:fromXDelta="0"     
 android:toXDelta="10"     
 android:duration="1000" 
 android:interpolator="@anim/cycle_4"
/>

Java 代码

AnimationtranslateAnimation=new TranslateAnimation(0, 100, 0, 0);
translateAnimation.setDuration(3000);//设置动画持续时间为3秒
translateAnimation.setInterpolator(this, android.R.anim.cycle_interpolator);//设置动画插入器
translateAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
imgShow.startAnimation(translateAnimation);

多个动画组合

AnimationSet animationSet = new AnimationSet(true);
AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
      Animation.RELATIVE_TO_SELF,0.5f,
      Animation.RELATIVE_TO_SELF,0.5f);
rotateAnimation.setDuration(1000);
animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(alphaAnimation);
image.startAnimation(animationSet);


属性动画

相关的类

ObjectAnimator  动画的执行类,后面详细介绍

ValueAnimator 动画的执行类,后面详细介绍 

AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等。

AnimatorInflater 用户加载属性动画的xml文件

TypeEvaluator  类型估值,主要用于设置动画操作属性的值。

总的来说,属性动画就是,动画的执行类来设置动画操作的对象的属性、持续时间,开始和结束的属性值,时间差值等,然后系统会根据设置的参数动态的变化对象的属性。

ObjectAnimator//  
 .ofFloat(view, "rotationX", 0.0F, 360.0F)// x轴旋转 
 .setDuration(500)//  
 .start();  
 
 //rotationY Y轴旋转
 //rotation  旋转
 
 //translationX X轴移动
 //translationY Y轴移动
 
 //scaleX X轴缩放
 //scaleY Y轴缩放
 ObjectAnimator animator1 = ObjectAnimator.ofFloat(textView, "scaleX", 0F, 1F,0F,2F);
 //alpha 透明度
 ObjectAnimator animator1 = ObjectAnimator.ofFloat(textView, "alpha", 0F, 1F,0F);

多个动画

//同步动画设计
PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("translationX", 0, 360F);
PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationY", 0, 360F);
PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("rotation", 0, 360F);
ObjectAnimator.ofPropertyValuesHolder(imageView, p1, p2 ,p3).setDuration(1000).start();

//通过AnimatiorSet来设计同步执行的多个属性动画
ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageView, "translationX", 0F, 360F);//X轴平移旋转
ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageView, "translationY", 0F, 360F);//Y轴平移旋转
ObjectAnimator animator3 = ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F);//360度旋转
AnimatorSet set = new AnimatorSet();
set.playSequentially(animator1, animator2, animator3);//分步执行
set.playTogether(animator1, animator2, animator3);//同步执行
 
//属性动画的执行顺序控制
set.play(animator3).with(animator1);  //同步
set.play(animator2).after(animator3); //异步
 
set.setDuration(1000);
set.start();

属性动画更多高级用法

http://blog.csdn.net/guolin_blog/article/details/43536355

http://blog.csdn.net/guolin_blog/article/details/43816093


你可能感兴趣的:(安卓 动画小结)