Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android應用開發入門(二十六)UI控件ImageSwitcher的使用

Android應用開發入門(二十六)UI控件ImageSwitcher的使用

編輯:Android開發實例

前言

  本文來聊一聊AndroidUI開發中ImageSwitcher控件的使用。ImageSwitcher控件與ImageView類似,都可以用於顯示圖片,但是ImageSwitcher通過名字可以看出,主要是用於多張圖片的切換顯示。在本篇中,會介紹ImageSwitcher控件的基本屬性的設置以及常用方法的調用。在最後會通過一個示例Demo來展示本篇博客中講到的一些內容。

 

ImageSwitcher

  ImageSwitcher是一個圖片切換器,它間接繼承自FrameLayout類,和ImageView相比,多了一個功能,那就是它說顯示的圖片切換時,可以設置動畫效果,類似於淡進淡出效果,以及左進右出滑動等效果。

  既然ImageSwitcher是用來顯示圖片的控件,AndroidAPI為我們提供了三種不同方法來設定不同的圖像來源,方法有:

  • setImageDrawable(Drawable):指定一個Drawable對象,用來給ImageSwitcher顯示。
  • setImageResource(int):指定一個資源的ID,用來給ImageSwitcher顯示。
  • setImageURL(URL):指定一個URL地址,用來給ImageSwitcher顯示URL指向的圖片資源。

動畫效果設定

  上面介紹到,ImageSwitcher可以設置圖片切換時,動畫的效果。對於動畫效果的支持,是因為它繼承了ViewAnimator類,這個類中定義了兩個屬性,用來確定切入圖片的動畫效果和切出圖片的動畫效果:

  • android:inAnimation:切入圖片時的效果。
  • android:outAnimation:切出圖片時的效果。

  以上兩個屬性如果在XML中設定的話,當然可以通過XML資源文件自定義動畫效果,但是如果只是想使用Android自帶的一些簡單的效果的話,需要設置參數為“@android:anim/AnimName”來設定效果,其中AnimName為指定的動畫效果。如果在代碼中設定的話,可以直接使用setInAnimation()和setOutAnimation()方法。它們都傳遞一個Animation的抽象對象,Animation用於描述一個動畫效果,一般使用一個AnimationUtils的工具類獲得。對於動畫效果,不是本片博客的重點,關於Android的動畫效果,以後再詳細講解。

  對於動畫效果,一般定義在android.R.anim類中,它是一個final類,以一些int常量的形式,定義的樣式,這裡僅僅介紹兩組樣式,淡進淡出效果,以及左進右出滑動效果,如果需要其他效果,可以查閱官方文檔。

  • fede_in:淡進。
  • fade_out:淡出
  • slide_in_left:從左滑進。
  • slide_out_right: 從右滑出。

  一般使用的話,通過這些常量名稱就可以看出是什麼效果,這裡並不是強制Xxx_in_Xxx就一定對應了setInAnimation()方法,但是一般如果不成組設定的話,效果會很丑,建議還是成組的對應In和Out設定效果。

ViewFactory

  在使用ImageSwitcher的時候,有一點特別需要注意的,需要通過setFactory()方法為它設置一個ViewSwitcher.ViewFactory接口,設置這個ViewFactory接口時需要實現makeView()方法,該方法通常會返回一個ImageView,而ImageSwitcher則負責顯示這個ImageView。如果不設定ViewFactory的話,ImageSwitcher將無法使用。通過官方文檔了解到,setFactory()方法被聲明在ViewSwitcher類中,而ImageSwitcher直接繼承自ViewSwitcher類。ViewSwitcher的功能與ImageSwitcher類似,只是ImageSwitcher用於展示圖片,而ViewSwitcher用於展示一些View視圖。

  可以這麼理解,通過ViewFactory中的makeView()方法返回一個新的View視圖,用來放入ViewSwitcher中展示,而對於ImageSwitcher而言,這裡通常返回的是一個ImageView。

示例程序

  下面通過一個Demo來說明上面講到的內容。在示例中定義一個ImageSwitcher和兩個Button,這兩個按鈕分別控制著圖像的上一張、下一張顯示,當然,在資源中必須存在這幾個待切換的圖片文件。。

  布局代碼:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     xmlns:tools="http://schemas.android.com/tools" 
  3.     android:layout_width="match_parent" 
  4.     android:layout_height="match_parent" 
  5.     android:paddingBottom="@dimen/activity_vertical_margin" 
  6.     android:paddingLeft="@dimen/activity_horizontal_margin" 
  7.     android:paddingRight="@dimen/activity_horizontal_margin" 
  8.     android:paddingTop="@dimen/activity_vertical_margin" 
  9.     tools:context=".MainActivity" android:orientation="vertical"> 
  10.       
  11.     <ImageSwitcher 
  12.         android:id="@+id/imageSwitcher1" 
  13.         android:layout_width="fill_parent" 
  14.         android:layout_height="150dp" 
  15.          /> 
  16.     <Button 
  17.         android:id="@+id/btnadd" 
  18.         android:layout_width="fill_parent" 
  19.         android:layout_height="wrap_content" 
  20.         android:text="上一張" /> 
  21.     <Button 
  22.         android:id="@+id/btnSub" 
  23.         android:layout_width="fill_parent" 
  24.         android:layout_height="wrap_content" 
  25.         android:text="下一張" /> 
  26. </LinearLayout> 

 實現代碼:

  1. package com.bgxt.imageswitcherDemo;  
  2.  
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.  
  6. import android.os.Bundle;  
  7. import android.app.Activity;  
  8. import android.graphics.drawable.Drawable;  
  9. import android.view.Menu;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.view.animation.Animation;  
  13. import android.view.animation.AnimationUtils;  
  14. import android.widget.Button;  
  15. import android.widget.ImageSwitcher;  
  16. import android.widget.ImageView;  
  17. import android.widget.ViewSwitcher.ViewFactory;  
  18.  
  19. public class MainActivity extends Activity {  
  20.     private Button btnAdd, btnSub;  
  21.     private ImageSwitcher imageSwitcher;  
  22.     private int index = 0;  
  23.     private List<Drawable> list;  
  24.  
  25.     @Override 
  26.     protected void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.activity_main);  
  29.         putData();  
  30.         imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher1);  
  31.         btnAdd = (Button) findViewById(R.id.btnadd);  
  32.         btnSub = (Button) findViewById(R.id.btnSub);  
  33.         btnAdd.setOnClickListener(myClick);  
  34.         btnSub.setOnClickListener(myClick);  
  35.           
  36.         //通過代碼設定從左緩進,從右換出的效果。  
  37.         imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.slide_in_left));  
  38.         imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.slide_out_right));  
  39.         imageSwitcher.setFactory(new ViewFactory() {  
  40.               
  41.             @Override 
  42.             public View makeView() {  
  43.                 // makeView返回的是當前需要顯示的ImageView控件,用於填充進ImageSwitcher中。  
  44.                 return new ImageView(MainActivity.this);  
  45.             }  
  46.         });  
  47.         imageSwitcher.setImageDrawable(list.get(0));  
  48.     }  
  49.    
  50.     @Override 
  51.     public boolean onCreateOptionsMenu(Menu menu) {  
  52.         // Inflate the menu; this adds items to the action bar if it is present.  
  53.         getMenuInflater().inflate(R.menu.main, menu);  
  54.         return true;  
  55.     }  
  56.  
  57.     private View.OnClickListener myClick = new OnClickListener() {  
  58.  
  59.         @Override 
  60.         public void onClick(View v) {  
  61.             switch (v.getId()) {  
  62.             case R.id.btnadd:  
  63.                 index--;  
  64.                 if(index<0)  
  65.                 {  
  66.                     //用於循環顯示圖片  
  67.                     index=list.size()-1;  
  68.                 }  
  69.                 //設定ImageSwitcher顯示新圖片  
  70.                 imageSwitcher.setImageDrawable(list.get(index));  
  71.                 break;  
  72.  
  73.             case R.id.btnSub:  
  74.                 index++;  
  75.                 if(index>=list.size())  
  76.                 {  
  77.                     //用於循環顯示圖片  
  78.                     index=0;  
  79.                 }  
  80.                 imageSwitcher.setImageDrawable(list.get(index));  
  81.                 break;  
  82.             }  
  83.         }  
  84.     };  
  85.  
  86.     private void putData() {  
  87.         //填充圖片的Drawable資源數組  
  88.         list = new ArrayList<Drawable>();  
  89.         list.add(getResources().getDrawable(R.drawable.bmp1));  
  90.         list.add(getResources().getDrawable(R.drawable.bmp2));  
  91.         list.add(getResources().getDrawable(R.drawable.bmp3));  
  92.         list.add(getResources().getDrawable(R.drawable.bmp4));  
  93.         list.add(getResources().getDrawable(R.drawable.bmp5));  
  94.     }  

 效果展示:

   源碼下載

總結

  本篇主要講解了ImageSwitcher的使用方式,而對於其父類ViewSwitcher的使用,大致上與ImageSwitcher相似,只是填充的內容不同而已,一般了解了ImageSwitcher的使用,再看ViewSwitcher就很好理解,以後有時間再詳細講解ViewSwitcher的使用。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved