關(guān)于布局動畫是針對ViewGroup而言的猫胁,意指ViewGroup在增加子View或者刪除子View時其子View的過渡動畫名眉,在Android官網(wǎng)有這么一個簡單的例子萍歉,其效果如下撩轰,接下來我們就通過這個例子來入門
最簡單的布局動畫實現(xiàn)
事實上,實現(xiàn)上面ViewGroup的布局動畫非常簡單啃沪,我們只要給子View所在的ViewGroup的xml中添加下面的屬性即可:
android:animateLayoutChanges="true"
1
1
通過設(shè)置以上代碼粘拾,當(dāng)ViewGroup在添加View時,子View會呈現(xiàn)出過渡的動畫效果谅阿,這個動畫效果是android默認的顯示效果半哟,而且無法使用自定義的動畫來替換這個效果酬滤,不過還是有其他方式可以實現(xiàn)自定義的過渡動畫滴,這個我們后面會分析寓涨,下面看看android官方給的demo的代碼實現(xiàn): activity_layout_changes.xml布局文件
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:showDividers="middle" android:divider="?android:dividerHorizontal" android:animateLayoutChanges="true" android:paddingLeft="16dp" android:paddingRight="16dp" /> </ScrollView> <TextView android:id="@android:id/empty" style="?android:textAppearanceSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:padding="32dp" android:text="@string/message_empty_layout_changes" android:textColor="?android:textColorSecondary" /></FrameLayout>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
布局代碼比較簡單盯串,使用了一個ScrollView包裹了LinearLayout布局并在LinearLayout中添加了屬性android:animateLayoutChanges="true"
,啟動了android自帶的布局動畫戒良,之所以使用ScrollView体捏,是為了在添加子View多時可以進行滑動,而TextView只不過在沒有子view時一個提示語糯崎。接著看看子View的布局文件list_item_example.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="?android:listPreferredItemHeightSmall" android:orientation="horizontal" android:showDividers="middle" android:divider="?android:dividerVertical" android:dividerPadding="8dp" android:gravity="center"> <TextView android:id="@android:id/text1" style="?android:textAppearanceMedium" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:paddingLeft="?android:listPreferredItemPaddingLeft" /> <ImageButton android:id="@+id/delete_button" android:layout_width="48dp" android:layout_height="match_parent" android:src="@drawable/ic_list_remove" android:background="?android:selectableItemBackground" android:contentDescription="@string/action_remove_item" /></LinearLayout>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
主要控件有用于顯示每個子View內(nèi)容的TextView和用于響應(yīng)刪除子View事件的ImageButton几缭,最后就是Activity的實現(xiàn): LayoutChangesActivity.Java
package com.example.android.animationsdemo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.v4.app.NavUtils;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;/** * This sample demonstrates how to use system-provided, automatic layout transitions. Layout * transitions are animations that occur when views are added to, removed from, or changed within * a {@link ViewGroup}. * * <p>In this sample, the user can add rows to and remove rows from a vertical * {@link android.widget.LinearLayout}.</p> /public class LayoutChangesActivity extends Activity { private ViewGroup mContainerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_changes); mContainerView = (ViewGroup) findViewById(R.id.container); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); //響應(yīng)添加事件的menu getMenuInflater().inflate(R.menu.activity_layout_changes, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: NavUtils.navigateUpTo(this, new Intent(this, MainActivity.class)); return true; case R.id.action_add_item: //添加子View findViewById(android.R.id.empty).setVisibility(View.GONE); addItem(); return true; } return super.onOptionsItemSelected(item); } private void addItem() { //實例化一個子View final ViewGroup newView = (ViewGroup) LayoutInflater.from(this).inflate( R.layout.list_item_example, mContainerView, false); // 隨機設(shè)置子View的內(nèi)容 ((TextView) newView.findViewById(android.R.id.text1)).setText( COUNTRIES[(int) (Math.random() * COUNTRIES.length)]); //設(shè)置刪除按鈕的監(jiān)聽 newView.findViewById(R.id.delete_button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mContainerView.removeView(newView); // If there are no rows remaining, show the empty view. if (mContainerView.getChildCount() == 0) { findViewById(android.R.id.empty).setVisibility(View.VISIBLE); } } }); //添加子View mContainerView.addView(newView, 0); } /* * A static list of country names. */ private static final String[] COUNTRIES = new String[]{ "Belgium", "France", "Italy", "Germany", "Spain", "Austria", "Russia", "Poland", "Croatia", "Greece", "Ukraine", };}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
這就是android中最簡單的布局動畫
布局動畫實之layoutAnimation
??事實上實現(xiàn)這種效果也比較簡單崎坊,我們只需要在ListView的布局文件中添加android:layoutAnimation=”@anim/layout”屬性即可备禀。接下來給出實現(xiàn)步驟: 實現(xiàn)動畫效果 left_into.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="500" android:fromXDelta="100%" android:fromYDelta="0" android:toXDelta="0" android:toYDelta="0" /> <alpha android:duration="500" android:fromAlpha="0" android:toAlpha="1" /></set>
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
這個比較簡單,就一個平移和透明度的效果奈揍,接著創(chuàng)建layout_animation.xml
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:animation="@anim/left_into" android:animationOrder="normal" android:delay="0.5" />
1
2
3
4
5
1
2
3
4
5
這里簡單介紹一下layoutAnimation標(biāo)簽屬性:
屬性名
含義
android:delay
delay的單位為秒曲尸,表示子View進入的延長時間
android:animationOrder
子類的進入方式 ,其取值有男翰,normal 0 默認 队腐,reverse 1 倒序 ,random 2 隨機
android:animation
子view要執(zhí)行的具體動畫的文件奏篙,自定義即可
然后設(shè)置給listView控件即可,activity_listview.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" android:layoutAnimation="@anim/layout_animation" > </ListView></LinearLayout>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ListViewActivity.java代碼如下:
package com.example.android.animationsdemo;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;/** * Created by zejian * Time 16/9/17. * Description: */public class ListViewActivity extends Activity { private ListView listView; private List<String> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listview); listView= (ListView) findViewById(R.id.listView); initData(); listView.setAdapter(new Myadpter()); } public void initData(){ list = new ArrayList<>(); for(int i=1;i<30;i++){ list.add("布局動畫listView測試_"+i); } } private class Myadpter extends BaseAdapter{ @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView tv= new TextView(ListViewActivity.this); tv.setTextSize(20); tv.setHeight(100); tv.setText(list.get(position)); return tv; } }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
執(zhí)行以上代碼迫淹,效果就是前面我們給出listView進入的動態(tài)效果秘通,這里特別注意的是,動畫只在listView子View第一次進入時有效敛熬,如果后面動態(tài)給listView添加子View時肺稀,此動畫效果無效,當(dāng)然除了通過xml設(shè)置外应民,我們還可以通過代碼動態(tài)設(shè)置话原,代碼范例如下夕吻,這里就不演示了。
//通過加載XML動畫設(shè)置文件來創(chuàng)建一個Animation對象,子View進入的動畫Animation animation=AnimationUtils.loadAnimation(this, R.anim.left_into);//得到一個LayoutAnimationController對象繁仁;LayoutAnimationController lac=new LayoutAnimationController(animation);//設(shè)置控件顯示的順序涉馅;lac.setOrder(LayoutAnimationController.ORDER_REVERSE);//設(shè)置控件顯示間隔時間;lac.setDelay(0.5f);//為ListView設(shè)置LayoutAnimationController屬性黄虱;listView.setLayoutAnimation(lac);
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
通過AnimationUtils.loadAnimation加載子View的動畫來并返回一個Animation對象稚矿,然后將Animation對象設(shè)置到LayoutAnimationController中并返回LayoutAnimationController對象,配置LayoutAnimationController對象的一些屬性捻浦,最后設(shè)置到ListView中晤揣,其中LayoutAnimationController對應(yīng)layoutAnimation標(biāo)簽,這里需要注意的是layoutAnimation動畫不僅僅限于ListView朱灿,GridView中昧识,也可用于一切ViewGroup中。
布局動畫實之LayoutTransition
前面我們說過ViewGroup在設(shè)置android:animateLayoutChanges="true"
后在添加或者刪除子view時可以啟用系統(tǒng)帶著的動畫效果盗扒,但這種效果無法通過自定義動畫去替換跪楞。不過還好android官方為我們提供了LayoutTransition類,通過LayoutTransition就可以很容易為ViewGroup在添加或者刪除子view設(shè)置自定義動畫的過渡效果了环疼。 ??LayoutTransition類用于當(dāng)前布局容器中需要View添加习霹,刪除,隱藏炫隶,顯示時設(shè)置布局容器子View的過渡動畫淋叶。也就是說利用LayoutTransition,可以分別為需添加或刪除的View對象在移動到新的位置的過程添加過渡的動畫效果伪阶。我們可以通過setLayoutTransition()方法為布局容器ViewGroup設(shè)置LayoutTransition對象煞檩,代碼如下:
//初始化容器動畫LayoutTransition mTransitioner = new LayoutTransition();container.setLayoutTransition(mTransitioner);
1
2
3
1
2
3
一般地,Layout中的子View對象有四種動畫變化的形式栅贴,如下:
屬性值
含義
LayoutTransition.APPEARING
子View添加到容器中時的過渡動畫效果斟湃。
LayoutTransition.CHANGE_APPEARING
子View添加到容器中時,其他子View位置改變的過渡動畫
LayoutTransition.DISAPPEARING
子View從容器中移除時的過渡動畫效果檐薯。
LayoutTransition.CHANGE_DISAPPEARING
子View從容器中移除時凝赛,其它子view位置改變的過渡動畫
LayoutTransition.CHANGING
子View在容器中位置改變時的過渡動畫,不涉及刪除或者添加操作
下面給出一個例子坛缕,先看布局文件activity_layout_animation.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="addView" android:text="添加控件" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="removeView" android:text="移除控件" /> </LinearLayout> <LinearLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" /></LinearLayout>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
比較簡單不啰嗦墓猎,接著看看LayoutAnimationActivity.java
package com.example.android.animationsdemo;import android.animation.LayoutTransition;import android.animation.ObjectAnimator;import android.animation.PropertyValuesHolder;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.LinearLayout;/** * Created by zejian * Time 16/9/17. * Description: /public class LayoutAnimationActivity extends Activity { private int i = 0; private LinearLayout container; private LayoutTransition mTransitioner; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_animation); container = (LinearLayout) findViewById(R.id.container); //構(gòu)建LayoutTransition mTransitioner = new LayoutTransition(); //設(shè)置給ViewGroup容器 container.setLayoutTransition(mTransitioner); setTransition(); } private void setTransition() { /* * 添加View時過渡動畫效果 / ObjectAnimator addAnimator = ObjectAnimator.ofFloat(null, "rotationY", 0, 90,0). setDuration(mTransitioner.getDuration(LayoutTransition.APPEARING)); mTransitioner.setAnimator(LayoutTransition.APPEARING, addAnimator); /* * 移除View時過渡動畫效果 / ObjectAnimator removeAnimator = ObjectAnimator.ofFloat(null, "rotationX", 0, -90, 0). setDuration(mTransitioner.getDuration(LayoutTransition.DISAPPEARING)); mTransitioner.setAnimator(LayoutTransition.DISAPPEARING, removeAnimator); /* * view 動畫改變時,布局中的每個子view動畫的時間間隔 / mTransitioner.setStagger(LayoutTransition.CHANGE_APPEARING, 30); mTransitioner.setStagger(LayoutTransition.CHANGE_DISAPPEARING, 30); /* LayoutTransition.CHANGE_APPEARING和LayoutTransition.CHANGE_DISAPPEARING的過渡動畫效果 * 必須使用PropertyValuesHolder所構(gòu)造的動畫才會有效果赚楚,不然無效毙沾!使用ObjectAnimator是行不通的, * 發(fā)現(xiàn)這點時真特么惡心,但沒想到更惡心的在后面,在測試效果時發(fā)現(xiàn)在構(gòu)造動畫時,”left”宠页、”top”左胞、”bottom”寇仓、”right”屬性的 * 變動是必須設(shè)置的,至少設(shè)置兩個,不然動畫無效,問題是我們即使這些屬性不想變動!!!也得設(shè)置!!! * 我就問您惡不惡心!,因為這里不想變動,所以設(shè)置為(0,0) * / PropertyValuesHolder pvhLeft = PropertyValuesHolder.ofInt("left", 0, 0); PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("top", 0, 0); PropertyValuesHolder pvhRight = PropertyValuesHolder.ofInt("right", 0, 0); PropertyValuesHolder pvhBottom = PropertyValuesHolder.ofInt("bottom", 0, 0); / * view被添加時,其他子View的過渡動畫效果 / PropertyValuesHolder animator = PropertyValuesHolder.ofFloat("scaleX", 1, 1.5f, 1); final ObjectAnimator changeIn = ObjectAnimator.ofPropertyValuesHolder( this, pvhLeft, pvhBottom, animator). setDuration(mTransitioner.getDuration(LayoutTransition.CHANGE_APPEARING)); //設(shè)置過渡動畫 mTransitioner.setAnimator(LayoutTransition.CHANGE_APPEARING, changeIn); /* * view移除時,其他子View的過渡動畫 */ PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofFloat("scaleX", 1, 1.5f, 1); final ObjectAnimator changeOut = ObjectAnimator.ofPropertyValuesHolder( this, pvhLeft, pvhBottom, pvhRotation). setDuration(mTransitioner.getDuration(LayoutTransition.CHANGE_DISAPPEARING)); mTransitioner.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, changeOut); } public void addView(View view) { i++; Button button = new Button(this); button.setText("布局動畫_" + i); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); container.addView(button, Math.min(1, container.getChildCount()), params); } public void removeView(View view) { if (i > 0) container.removeViewAt(0); }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
簡單分析一下烤宙,LayoutTransition.APPEARING和LayoutTransition.DISAPPEARING的情況下直接使用屬性動畫來設(shè)置過渡動畫效果即可遍烦,而對于LayoutTransition.CHANGE_APPEARING和LayoutTransition.CHANGE_DISAPPEARING必須使用PropertyValuesHolder所構(gòu)造的動畫才會有效果,不然無效门烂,真特么惡心乳愉, ,但沒想到更惡心的在后面,在測試效果時發(fā)現(xiàn)在構(gòu)造動畫時,”left”屯远、”top”蔓姚、”bottom”、”right”屬性的變動是必須設(shè)置的,至少設(shè)置兩個,不然動畫無效,最坑爹的是我們即使這些屬性不想變動!!!也得設(shè)置!!!我就問您惡不惡心!,那么我們不想改變這四個屬性時該如何設(shè)置呢慨丐?這時只要傳遞的可變參數(shù)都一樣就行如下面的(0,0)也可以是(100,100)即可(坑爹捌缕辍!測試半天才發(fā)現(xiàn)房揭,一直在考慮代碼有沒有問題备闲,最后發(fā)現(xiàn)時特么的也是醉了…….):
PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("top",0,0); PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("left",100,100); PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("bottom",0,0); PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("right",0,0);
1
2
3
4
1
2
3
4
還有點需要注意的是在使用的ofInt,ofFloat中的可變參數(shù)值時,第一個值和最后一個值必須相同捅暴,不然此屬性將不會有動畫效果恬砂,比如下面首位相同是有效的
PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("top",100,0,100);PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("top",0,100,0);
1
2
1
2
但是如果是下面的設(shè)置就是無效的:
PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("left",0,100);
1
1
關(guān)于PropertyValuesHolder,后面我會分開單獨一篇來分析蓬痒,這里我們只需知道PropertyValuesHolder構(gòu)造的動畫可以設(shè)置給ObjectAnimator.ofPropertyValuesHolder()便可以產(chǎn)生響應(yīng)的動畫效果即可泻骤,該方法原型如下:
public static ObjectAnimator ofPropertyValuesHolder(Object target, PropertyValuesHolder... values)
1
1
最后我們通過setAniamtor的方法設(shè)置LayoutTransition的5種狀態(tài)下的過渡動畫,最后運行一下程序梧奢,效果如下: 最后這里小結(jié)一下LayoutTransition的一些常用函數(shù):
函數(shù)名稱
說明
setAnimator(int transitionType, Animator animator)
設(shè)置不同狀態(tài)下的動畫過渡,transitionType取值為狱掂, APPEARING、DISAPPEARING亲轨、CHANGE_APPEARING趋惨、CHANGE_DISAPPEARING 、CHANGING
setDuration(long duration)
設(shè)置所有動畫完成所需要的時長
setDuration(int transitionType, long duration)
設(shè)置特定type類型動畫時長惦蚊,transitionType取值為器虾, APPEARING、DISAPPEARING蹦锋、CHANGE_APPEARING曾撤、CHANGE_DISAPPEARING 、CHANGING
setStagger(int transitionType, long duration)
設(shè)置特定type類型動畫的每個子item動畫的時間間隔 ,transitionType取值為: APPEARING晕粪、DISAPPEARING、CHANGE_APPEARING渐裸、CHANGE_DISAPPEARING巫湘、CHANGING
setInterpolator(int transitionType, TimeInterpolator interpolator)
設(shè)置特定type類型動畫的插值器, transitionType取值為: APPEARING装悲、DISAPPEARING、CHANGE_APPEARING尚氛、CHANGE_DISAPPEARING诀诊、CHANGING
setStartDelay(int transitionType, long delay)
設(shè)置特定type類型動畫的動畫延時 transitionType取值為, APPEARING、DISAPPEARING阅嘶、CHANGE_APPEARING属瓣、CHANGE_DISAPPEARING 、CHANGING
addTransitionListener(TransitionListener listener)
設(shè)置監(jiān)聽器TransitionListener
關(guān)于監(jiān)聽器接口TransitionListener原型如下:
/** * This interface is used for listening to starting and ending events for transitions. /public interface TransitionListener { /* * 監(jiān)聽LayoutTransition當(dāng)前對應(yīng)的transitionType類型動畫開始 * @param transition LayoutTransition對象實例 * @param container LayoutTransition綁定的容器-container * @param view 當(dāng)前在做動畫的View對象 * @param transitionType LayoutTransition類型讯柔,取值有:APPEARING抡蛙、DISAPPEARING、 * CHANGE_APPEARING魂迄、CHANGE_DISAPPEARING粗截、CHANGING / public void startTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType); /* * 監(jiān)聽LayoutTransition當(dāng)前對應(yīng)的transitionType類型動畫結(jié)束 * @param transition LayoutTransition對象實例 * @param container LayoutTransition綁定的容器-container * @param view 當(dāng)前在做動畫的View對象 * @param transitionType LayoutTransition類型,取值有:APPEARING捣炬、DISAPPEARING熊昌、 * CHANGE_APPEARING、CHANGE_DISAPPEARING湿酸、CHANGING */ public void endTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType);}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
注釋比較清晰婿屹,就不過多說明,我們?nèi)绻朐谀撤NtransitionType類型動畫開或者結(jié)束時設(shè)置某些操作推溃,便可實現(xiàn)該接口昂利,測試效果也比較簡單,這里就不舉例了美莫。ok~页眯,關(guān)于布局動畫就先了解這么多吧。