android之動畫(二)通過動畫布局聲明檔案和關聯檔案為容器布局—-布局動畫

來源:互聯網
上載者:User

先:

當然,在這裡你是無法看到動態動畫效果的,當然如果你將筆者的代碼運行,自然是可以看到動畫效果的。這裡的效果是說,當我們的list中的每一項最終顯示為中的樣子前展示給我們的動畫效果。

讓我們看看activity代碼:

package cn.com.chenzheng_java.animation;</p><p>import android.app.Activity;<br />import android.os.Bundle;<br />import android.widget.ArrayAdapter;<br />import android.widget.ListView;<br />/**<br /> * @description 布局動畫<br /> * 何謂布局動畫:將容器內的視圖製作成動畫,它是補間動畫的一種。當<br /> * 前的例子中,我們要將listView容器中的內容做成動畫<br /> * @author chenzheng_java<br /> * @since 2011/03/24<br /> */<br />public class Animation2Activity extends Activity{<br />ListView listView;<br />String[]city = new String[]{<br />"中關村",<br />"海澱劇院",<br />"海澱醫院",<br />"人民大學"<br />};</p><p>@Override<br />protected void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.animation2);<br />listView = (ListView) findViewById(R.id.listView_animation2);<br />ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, city);<br />listView.setAdapter(adapter);<br />}</p><p>}</p><p>

animation2.xml布局檔案:

 

<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />android:layout_width="fill_parent" android:layout_height="fill_parent"<br />android:orientation="vertical"><br /><ListView android:layout_width="fill_parent"<br />android:id="@+id/listView_animation2"<br />android:persistentDrawingCache="animation|scrolling"<br />android:layoutAnimation="@anim/animation2_drawable"<br />android:layout_height="wrap_content"></ListView><br /></LinearLayout><br /><!--<br />我們可以看到,在ListView的布局設定中,我們設定了兩個和動畫相關的屬性:<br />android:persistentDrawingCache:該屬性建議進行設定,它會對動畫和滾動效果進行最佳化。<br />android:layoutAnimation:當前版面配置容器所對應的動畫關聯檔案,注意,這裡指定的是動畫關聯檔案,而並非動畫聲明檔案<br /> -->

動畫聲明檔案:

scale_anim.xml

<?xml version="1.0" encoding="utf-8"?><br /><set xmlns:android="http://schemas.android.com/apk/res/android"<br />android:interpolator="@android:anim/accelerate_interpolator"><br /><scale<br />android:fromXScale="1"<br />android:toXScale="1"<br />android:fromYScale="0.1"<br />android:toYScale="1.0"<br />android:duration="1000"<br />android:pivotX="50%"<br />android:pivotY="50%"<br />android:startOffset="100"><br /></scale></p><p></set><br /><!--<br />動畫聲明檔案 該檔案位於res/anim檔案夾下<br />對動畫的具體行為進行定義:<br />android:fromXScale="1"<br />android:toXScale="1"指定了在X軸上,不進行縮放</p><p>android:fromYScale="0.1"<br />android:toYScale="1.0" 指定了再Y軸上,從十分之一開始方法,一直放大到正常大小</p><p>android:duration="1000"動畫展示的時間</p><p>android:pivotX="50%"<br />android:pivotY="50%" 在動畫執行的中間點,對象的大小在X/Y軸上都是50%</p><p>android:startOffset="100" 改動畫執行之前等待的毫秒數<br /> -->

動畫關聯檔案:

animation2_drawable.xml

<?xml version="1.0" encoding="utf-8"?><br /><layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"<br />android:delay="30%"<br />android:animationOrder="reverse"<br />android:animation="@anim/scale_anim"<br />><br /></layoutAnimation></p><p><!-- 動畫關聯檔案 該檔案位於res/anim檔案夾下<br />該檔案是容器和動畫聲明檔案的中間媒介,它綁定到了一個動畫聲明檔案,<br />並且對該動畫的一些播放屬性進行了設定,例如這裡的<br />android:delay 每一項動畫應該在延遲動畫總時間的30%開始執行(當前列表有多個動畫時使用),<br />延遲動畫總時間對應著動畫聲明檔案中android:startOffset的總和<br />android:animationOrder:列表中的動畫的執行順序(當前列表有多個動畫時使用)<br />android:animation 指定了動畫聲明檔案<br /> -->

 

代碼中的注釋已經說得很明白了,我就不多說了。我們這裡需要注意的是,布局檔案中,動畫聲明檔案和動畫關聯檔案的位置都是在res/anim檔案夾下哦。

-----------------------------------------------------------------------------------------------

上面只是展示了一個縮放動畫,那麼常見的動畫還有那些呢?

<?xml version="1.0" encoding="utf-8"?><br /><set xmlns:android="http://schemas.android.com/apk/res/android"<br />android:interpolator="@android:anim/accelerate_interpolator"><br /><!-- rotate旋轉動畫,圍繞著文本的中心旋轉一圈 --><br /><rotate<br />android:fromDegrees="0.0"<br />android:toDegrees="360"<br />android:pivotY="50%"<br />android:pivotX="50%"<br />android:duration="5000"<br />></rotate><br /><!-- translate代表著移動動畫,改動畫將文本從當前所分配的顯示空間的頂部移動到底部 --><br /><translate<br />android:fromYDelta="-100%"<br />android:toYDelta="0"<br />android:duration="10000"<br />></translate><br /><!-- alpha代表著可見度漸層動畫,從不可見,變為完全可見 --><br /><alpha<br />android:fromAlpha="0.0"<br />android:toAlpha="1.0"<br />android:duration="3000"<br />></alpha><br /></set><br />

在這裡,我們可以看到,無論是哪個動畫聲明檔案中,都有這麼一行代碼:

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

那麼,這行代碼到底是幹什麼用的呢?

這東西,我們在android中叫做插值器。它告訴系統我們的動畫的實現細節,例如一個顏色隨著時間的變化而變化時,是按照線性變換,還是指數變換?還是開始的時候很快,後邊漸漸地開始變慢呢?

我們都知道,@android方式代表著,這裡引用的是android系統提供的一個xml布局檔案。實際上,這個布局檔案是android.view.animation下一個類的映射。這一類的類主要有:

AccelerateDecelerateInterpolator

AccelrateInterpolator

CycleInterpolator

LinearInterpolator

……

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.