android動畫 通過動畫布局宣告檔案和關聯檔案為容器佈局----佈局動畫
阿新 • • 發佈:2019-01-02
先上圖:
當然,在這裡你是無法看到動態的動畫效果的,當然如果你將筆者的程式碼執行,自然是可以看到動畫效果的。這裡的效果是說,當我們的list中的每一項最終顯示為上圖中的樣子前展示給我們的動畫效果。
讓我們看看activity程式碼:
[java] view plain copy print?- package cn.com.chenzheng_java.animation;
- import <a href=“http://lib.csdn.net/base/android”class=‘replace_word’ title=“Android知識庫” target=‘_blank’ style=‘color:#df3434; font-weight:bold;’
- import android.os.Bundle;
- import android.widget.ArrayAdapter;
- import android.widget.ListView;
- /**
- * @description 佈局動畫
- * 何謂佈局動畫:將容器內的檢視製作成動畫,它是補間動畫的一種。當
- * 前的例子中,我們要將listView容器中的內容做成動畫
- * @author chenzheng_java
- * @since 2011/03/24
- */
- publicclass Animation2Activity
- ListView listView;
- String[]city = new String[]{
- ”中關村”,
- ”海淀劇院”,
- ”海淀醫院”,
- ”人民大學”
- };
- @Override
- protectedvoid 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佈局檔案:
[xhtml] view plain copy print?- <?xmlversion=“1.0”encoding=“utf-8”?>
- <LinearLayoutxmlns:android=“http://schemas.android.com/apk/res/android”
- android:layout_width=“fill_parent”android:layout_height=“fill_parent”
- android:orientation=“vertical”>
- <ListViewandroid: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
[xhtml] view plain copy print?- <?xmlversion=“1.0”encoding=“utf-8”?>
- <setxmlns: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
[xhtml] view plain copy print?- <?xmlversion=“1.0”encoding=“utf-8”?>
- <layoutAnimationxmlns: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資料夾下哦。
———————————————————————————————–
上面只是展示了一個縮放動畫,那麼常見的動畫還有那些呢?
[xhtml] view plain copy print?- <?xmlversion=“1.0”encoding=“utf-8”?>
- <setxmlns: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
……