android ViewSwitcher的用法介绍

    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>

你可能感兴趣的:(android ViewSwitcher的用法介绍)