标签:
ViewSwitcher 的作用简单来说就是:在两个视图间转换时显示动画
它的两个子类应该很熟悉,ImageSwitcher:转换图片时增加动画效果;TextSwitcher:转换文字时增加动画效果;其实例见apidemos中ImageSwitcher实例和TextSwitcher实例
但不要忽略ViewSwicher,在一些场合还是很有用的
在android里视图切换是一个很常见的需求,比如说加载view和后台背景,当后台加载数据时,loding view显示,数据View隐藏,加载完成,反向此过程。使用ViewSwicher提供了简单的逻辑,产生更可读的代码。
举个最常见的例子,模拟点击LoadMoreItems按钮或得更多数据。
1
2
3
4
5
6
7
8
9
10
11
12
|
<?xml
version= "1.0"
encoding= "utf-8" ?>
<Button
xmlns:android= "http://schemas.android.com/apk/res/android" android:id= "@+id/btn_loadmorecontacts" android:text= "Load
More Items" android:layout_width= "fill_parent" android:layout_height= "wrap_content" android:textAppearance= "?android:attr/textAppearanceLarge" android:minHeight= "?android:attr/listPreferredItemHeight" android:textColor= "#FFFFFF" android:background= "@android:drawable/list_selector_background" android:clickable= "true" android:onClick= "onClick"
/> |
大致是这样子
加载中视图:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?xml
version= "1.0"
encoding= "utf-8" ?>
<RelativeLayout
xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:gravity= "center_horizontal" android:minHeight= "?android:attr/listPreferredItemHeight" >
<ProgressBar
android:id= "@+id/progressbar" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_centerVertical= "true"
/> <TextView
android:text= "Loading…" android:textAppearance= "?android:attr/textAppearanceLarge" android:layout_height= "wrap_content" android:layout_width= "wrap_content" android:layout_toRightOf= "@+id/progressbar" android:layout_centerVertical= "true" android:gravity= "center" android:padding= "10dip" android:textColor= "#FFFFFF"
/> </RelativeLayout> |
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
|
public
class ViewSwitcherExample extends ListActivity implements
OnClickListener { //sample
list items static
final String[] ITEMS = new
String[] {
"List
Item 1" ,
"List
Item 2" ,
"List
Item 3" ,
"List
Item 4" ,
"List
Item 5" ,
"List
Item 6" ,
"List
Item 7" ,
"List
Item 8" ,
"List
Item 9" ,
"List
Item 10"
}; //the
ViewSwitcher private
ViewSwitcher switcher; /**
Called when the activity is first created. */ @Override
public
void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState);
//no
window title requestWindowFeature(Window.FEATURE_NO_TITLE);
//create
the ViewSwitcher in the current context switcher
= new
ViewSwitcher( this );
//footer
Button: see XML1 Button
footer = (Button)View.inflate( this ,
R.layout.btn_loadmore, null );
//progress
View: see XML2 View
progress = View.inflate( this ,
R.layout.loading_footer, null );
//add
the views (first added will show first) switcher.addView(footer);
switcher.addView(progress);
//add
the ViewSwitcher to the footer getListView().addFooterView(switcher);
//add
items to the ListView setListAdapter( new
ArrayAdapter( this ,
android.R.layout.simple_list_item_1,
ITEMS)); }
@Override
/*
Load More Button Was Clicked */ public
void onClick(View arg0) { //first
view is showing, show the second progress view switcher.showNext();
//and
start background work new
getMoreItems().execute(); }
/**
Background Task To Get More Items**/ private
class getMoreItems extends AsyncTask { @Override
protected
Object doInBackground(Void… params) { //code
to add more items //...
try
{ Thread.sleep(3000);
//only
to demonstrate }
catch
(InterruptedException e) { e.printStackTrace();
}
return
null ;
}
@Override
/*
Background Task is Done */ protected
void onPostExecute(Object result) { //go
back to the first view switcher.showPrevious();
//update
the ListView }
}
} |
当然你也可以使用xml形式构造ViewSwicher,这里加上了系统自带的切换效果@android:anim/slide_in_left和@android:anim/slide_out_right
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
|
<?xmlversion= "1.0" encoding= "utf-8" ?>
<ViewSwitcherxmlns:android= "http://schemas.android.com/apk/res/android" android:id= "@+id/profileSwitcher" android:layout_width= "fill_parent" android:layout_height= "fill_parent" android:inAnimation= "@android:anim/slide_in_left" android:outAnimation= "@android:anim/slide_out_right" >
<RelativeLayout
android:layout_width= "wrap_content" android:layout_height= "wrap_content" >
<ProgressBar
android:id= "@+id/progressbar" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_centerVertical= "true" />
<TextView
android:text= "Loading…" android:layout_height= "wrap_content" android:layout_width= "wrap_content" android:layout_toRightOf= "@+id/progressbar" android:gravity= "center" />
</RelativeLayout>
<RelativeLayout
android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:gravity= "center_horizontal" >
<TextView
android:text= "Finished!" android:layout_height= "wrap_content" android:layout_width= "wrap_content" android:layout_centerVertical= "true" />
</RelativeLayout>
</ViewSwitcher> |
标签:
原文地址:http://blog.csdn.net/love_xsq/article/details/44922407