android ViewSwitcher的用法介绍

来源:互联网 发布:java poi 读取excel 编辑:程序博客网 时间:2024/05/28 05:18

    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 = newString[] 
          {"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 = newViewSwitcher(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(newArrayAdapter(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 
        newgetMoreItems().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(); 
            
            returnnull
        
     
        @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>
1 0
原创粉丝点击