现在的位置: 首页 > 综合 > 正文

android之动画通过动画布局声明文件和关联文件为容器布局—-布局动画

2013年09月08日 ⁄ 综合 ⁄ 共 3666字 ⁄ 字号 评论关闭

先上图:

当然,在这里你是无法看到动态的动画效果的,当然如果你将笔者的代码运行,自然是可以看到动画效果的。这里的效果是说,当我们的list中的每一项最终显示为上图中的样子前展示给我们的动画效果。

让我们看看activity代码:

import android.app.Activity;  
import android.os.Bundle;  
import android.widget.ArrayAdapter;  
import android.widget.ListView;  
/** 
 * @description 布局动画 
 * 何谓布局动画:将容器内的视图制作成动画,它是补间动画的一种。当 
 * 前的例子中,我们要将listView容器中的内容做成动画 
 * @author chenzheng_java 
 * @since 2011/03/24 
 */  
public class Animation2Activity extends Activity{  
    ListView listView;  
    String[]city = new String[]{  
            "中关村",  
            "海淀剧院",  
            "海淀医院",  
            "人民大学"  
    };  
      
      
@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.animation2);  
    listView = (ListView) findViewById(R.id.listView_animation2);  
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, city);  
    listView.setAdapter(adapter);  
}  
 
  
}  

animation2.xml布局文件:

    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="fill_parent" android:layout_height="fill_parent"  
        android:orientation="vertical">  
        <ListView android:layout_width="fill_parent"   
        android:id="@+id/listView_animation2"  
        android:persistentDrawingCache="animation|scrolling"  
        android:layoutAnimation="@anim/animation2_drawable"  
        android:layout_height="wrap_content"></ListView>  
    </LinearLayout>  
    <!--   
        我们可以看到,在ListView的布局设置中,我们设置了两个和动画相关的属性:  
        android:persistentDrawingCache:该属性建议进行设置,它会对动画和滚动效果进行优化。  
        android:layoutAnimation:当前布局容器所对应的动画关联文件,注意,这里指定的是动画关联文件,而并非动画声明文件  
     -->  

动画声明文件:

scale_anim.xml

    <?xml version="1.0" encoding="utf-8"?>  
    <set xmlns:android="http://schemas.android.com/apk/res/android"  
        android:interpolator="@android:anim/accelerate_interpolator">  
        <scale  
        android:fromXScale="1"   
        android:toXScale="1"  
        android:fromYScale="0.1"   
        android:toYScale="1.0"   
        android:duration="1000"  
        android:pivotX="50%"  
        android:pivotY="50%"   
        android:startOffset="100">  
        </scale>  
      
    </set>  
    <!--   
        动画声明文件     该文件位于res/anim文件夹下  
        对动画的具体行为进行定义:  
        android:fromXScale="1"   
        android:toXScale="1"指定了在X轴上,不进行缩放  
          
        android:fromYScale="0.1"   
        android:toYScale="1.0" 指定了再Y轴上,从十分之一开始方法,一直放大到正常大小  
          
        android:duration="1000"动画展示的时间  
          
        android:pivotX="50%"  
        android:pivotY="50%" 在动画执行的中间点,对象的大小在X/Y轴上都是50%  
          
        android:startOffset="100" 改动画执行之前等待的毫秒数  
     -->  

动画关联文件:

animation2_drawable.xml

    <?xml version="1.0" encoding="utf-8"?>  
    <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"  
        android:delay="30%"  
        android:animationOrder="reverse"  
        android:animation="@anim/scale_anim"  
    >  
    </layoutAnimation>  
      
    <!-- 动画关联文件      该文件位于res/anim文件夹下  
        该文件是容器和动画声明文件的中间媒介,它绑定到了一个动画声明文件,  
        并且对该动画的一些播放属性进行了设置,例如这里的  
        android:delay 每一项动画应该在延迟动画总时间的30%开始执行(当前列表有多个动画时使用),  
                    延迟动画总时间对应着动画声明文件中android:startOffset的总和  
        android:animationOrder:列表中的动画的执行顺序(当前列表有多个动画时使用)  
        android:animation 指定了动画声明文件  
     -->  

代码中的注释已经说得很明白了,我就不多说了。我们这里需要注意的是,布局文件中,动画声明文件和动画关联文件的位置都是在res/anim文件夹下哦。

上面只是展示了一个缩放动画,那么常见的动画还有那些呢?

    <?xml version="1.0" encoding="utf-8"?>  
    <set xmlns:android="http://schemas.android.com/apk/res/android"  
        android:interpolator="@android:anim/accelerate_interpolator">  
        <!-- rotate旋转动画,围绕着文本的中心旋转一圈 -->  
        <rotate  
            android:fromDegrees="0.0"  
            android:toDegrees="360"  
            android:pivotY="50%"  
            android:pivotX="50%"  
            android:duration="5000"  
        ></rotate>  
        <!-- translate代表着移动动画,改动画将文本从当前所分配的显示空间的顶部移动到底部 -->  
        <translate   
            android:fromYDelta="-100%"  
            android:toYDelta="0"  
            android:duration="10000"  
        ></translate>  
        <!-- alpha代表着可见度渐变动画,从不可见,变为完全可见 -->  
        <alpha  
            android:fromAlpha="0.0"  
            android:toAlpha="1.0"  
            android:duration="3000"  
        ></alpha>  
    </set>  

在这里,我们可以看到,无论是哪个动画声明文件中,都有这么一行代码:

android:interpolator="@android:anim/accelerate_interpolator"

那么,这行代码到底是干什么用的呢?

这东西,我们在android中叫做插值器。它告诉系统我们的动画的实现细节,例如一个颜色随着时间的变化而变化时,是按照线性变换,还是指数变换?还是开始的时候很快,后边渐渐地开始变慢呢?

我们都知道,@android方式代表着,这里引用的是android系统提供的一个xml布局文件。实际上,这个布局文件是android.view.animation下一个类的映射。这一类的类主要有:

AccelerateDecelerateInterpolator

AccelrateInterpolator

CycleInterpolator

LinearInterpolator

抱歉!评论已关闭.