Android幻燈片式圖片瀏覽器

本文轉自:http://blog.csdn.net/bear_huangzhen/article/details/24232029

今天我們通過使用Android提供給我們的現有空間Gallery和ImageSwitcher來實現一個幻燈片式的圖片瀏覽器。

(1)首先我們新建一個工程,修改主佈局文件activity_main.xml內容如下:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:gravity="center_horizontal"  
  6.     android:orientation="vertical" >  
  7.   
  8.     <ImageSwitcher  
  9.         android:id="@+id/image_switcher"  
  10.         android:layout_width="wrap_content"  
  11.         android:layout_height="0dip"  
  12.         android:layout_weight="2"  
  13.         android:paddingTop="30dip" />  
  14.   
  15.     <!--  
  16.          android:layout_weight  詳細解釋:按比例顯示LinearLayout內各個子控件,  
  17.                                 需設置android:layout_width="0dp",  
  18.                                 如果爲豎直方向的設置android:layout_height="0dp"。  
  19.                                 在這種情況下某子個控件佔用LinearLayout的比例爲:  
  20.                                 本控件weight值 / LinearLayout內所有控件的weight值的和。  
  21.                                   
  22.          android:spacing 設置圖片的間距  
  23.            
  24.          android:unselectedAlpha 設置爲選中條目的透明度  
  25.     -->  
  26.   
  27.     <Gallery  
  28.         android:id="@+id/gallery"  
  29.         android:layout_width="fill_parent"  
  30.         android:layout_height="0dip"  
  31.         android:layout_weight="1"  
  32.         android:spacing="5dip"  
  33.         android:unselectedAlpha="0.6" />  
  34.   
  35. </LinearLayout>  


(2)在Java代碼部分,修改MainActivity.java的內容如下(代碼已經詳細註釋):

  1. public class MainActivity extends Activity {  
  2.   
  3.     // 聲明並靜態初始化圖片id數組  
  4.     private int[] imageIds = { R.drawable.img01, R.drawable.img02,  
  5.             R.drawable.img03, R.drawable.img04, R.drawable.img05,  
  6.             R.drawable.img06, R.drawable.img07, R.drawable.img08,  
  7.             R.drawable.img09, R.drawable.img10, R.drawable.img11,  
  8.             R.drawable.img12 };  
  9.   
  10.     // 聲明一個Gallery視圖控件變量  
  11.     private Gallery gallery;  
  12.   
  13.     // 聲明一個ImageSwitcher視圖控件變量  
  14.     private ImageSwitcher imageSwitcher;  
  15.   
  16.     @Override  
  17.     public void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.activity_main);  
  20.   
  21.         // 獲取視圖控件對象  
  22.         gallery = (Gallery) findViewById(R.id.gallery);  
  23.         imageSwitcher = (ImageSwitcher) findViewById(R.id.image_switcher);  
  24.   
  25.         // 設置動畫效果  
  26.         imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,  
  27.                 android.R.anim.fade_in));  
  28.         imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,  
  29.                 android.R.anim.fade_out));  
  30.   
  31.         // 爲imageSwitcher設置ViewFactory對象  
  32.         imageSwitcher.setFactory(new ViewFactory() {  
  33.   
  34.             @Override  
  35.             public View makeView() {  
  36.                 // 初始化一個ImageView對象  
  37.                 ImageView imageView = new ImageView(MainActivity.this);  
  38.                 // 設置保持縱橫比居中縮放圖像  
  39.                 imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);  
  40.                 // 設置imageView的寬高  
  41.                 imageView.setLayoutParams(new FrameLayout.LayoutParams(  
  42.                         LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  
  43.                   
  44.                 return imageView;  
  45.             }  
  46.         });  
  47.           
  48.         //初始化一個MainGalleryAdapter對象  
  49.         MainGalleryAdapter adapter = new MainGalleryAdapter();  
  50.           
  51.         //將適配器與gallery關聯起來  
  52.         gallery.setAdapter(adapter);  
  53.           
  54.         //初始選中中間的圖片  
  55.         gallery.setSelection(imageIds.length/2);  
  56.   
  57.         gallery.setOnItemClickListener(new OnItemClickListener() {  
  58.   
  59.             @Override  
  60.             public void onItemClick(AdapterView<?> parent, View view,  
  61.                     int position, long id) {  
  62.                 //在ImageSwitcher中顯示選中的圖片  
  63.                 imageSwitcher.setImageResource(imageIds[position]);  
  64.             }  
  65.         });  
  66.     }  
  67.   
  68.     @Override  
  69.     public boolean onCreateOptionsMenu(Menu menu) {  
  70.         getMenuInflater().inflate(R.menu.activity_main, menu);  
  71.         return true;  
  72.     }  
  73.   
  74.     /** 
  75.      * 定義Gallery的數據適配器MainGalleryAdapter 
  76.      */  
  77.     class MainGalleryAdapter extends BaseAdapter {  
  78.           
  79.         /** 
  80.          * 獲得數量 
  81.          */  
  82.         @Override  
  83.         public int getCount() {  
  84.             return imageIds.length;  
  85.         }  
  86.           
  87.         /** 
  88.          * 獲得當前選項 
  89.          */  
  90.         @Override  
  91.         public Object getItem(int position) {  
  92.             return getResources().getDrawable(imageIds[position]);  
  93.         }  
  94.           
  95.         /** 
  96.          * 獲得當前選項的id 
  97.          */  
  98.         @Override  
  99.         public long getItemId(int position) {  
  100.             return position;  
  101.         }  
  102.           
  103.         /** 
  104.          * 獲得當前選項的視圖 
  105.          */  
  106.         @Override  
  107.         public View getView(int position, View convertView, ViewGroup parent) {  
  108.             //初始化一個ImageView對象  
  109.             ImageView imageView = new ImageView(MainActivity.this);  
  110.             //設置縮放方式  
  111.             imageView.setScaleType(ImageView.ScaleType.FIT_XY);  
  112.             //設置ImageView的寬高  
  113.             imageView.setLayoutParams(new Gallery.LayoutParams(180135));  
  114.             //設置IamgeView顯示的圖片  
  115.             imageView.setImageResource(imageIds[position]);  
  116.               
  117.             /** 
  118.              * 設置ImageView背景,這裏背景使用的是android提供的一種背景風格 
  119.              * 在values/attr.xml文件中需要一下內容 
  120.              *  <declare-styleable name="Gallery"> 
  121.              *      <attr name="android:galleryItemBackground" /> 
  122.              *  </declare-styleable> 
  123.              */  
  124.             TypedArray typedArray = MainActivity.this  
  125.                     .obtainStyledAttributes(R.styleable.Gallery);  
  126.             int mGalleryItemBackground = typedArray.getResourceId(  
  127.                     R.styleable.Gallery_android_galleryItemBackground, 0);  
  128.             imageView.setBackgroundResource(mGalleryItemBackground);  
  129.               
  130.             //返回ImageView對象  
  131.             return imageView;  
  132.         }  
  133.   
  134.     }  
  135. }  

(3)我們看一下程序運行後的效果圖:



(4)附上完整的android源碼:

Android幻燈片式的圖片瀏覽器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章