歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android圖片浏覽器

主要實現的功能就是浏覽圖片。

用到的控件:ImageSwitcher和Gallery。

推薦閱讀:Android音樂播放器:使用Android系統自帶的數據庫 http://www.linuxidc.com/Linux/2011-10/45048.htm

這種簡單的圖片浏覽器網上有很多,我也是參考網上寫的。但是我做了一些優化:

1、網上基本都是加載進來顯示這樣的頁面:

下面的Gallery不對稱。我做了優化,加載的時候是把左邊黑色的空白也鋪上了。如下:

2、可能這個地方不算是優化,我看別人的程序都是在滑動的時候,ImageSwitcher會不斷的變化,會不會很消耗資源?(只是換個方法實現變化而已,所以算不得優化)。我改成了只有停下來,你點擊那一張,ImageSwitcher才會變化。

3、這個地方個人覺得還有有必要改一下的,我是參考了Listview的機制,實現的功能都是讓圖片無限滑動,

這個是在Adapter中這麼寫的:

  1. public int getCount()  
  2. {  
  3.     return Integer.MAX_VALUE;  
  4. }  

讓它最大值是最大整數,基本上是滑不到盡頭的。

這個是很正常的功能,但是每滑動一次就會

ImageView imageview = new ImageView(mContext);  

這樣會new無數了ImageView對象,完全是沒必要的。

我們可以這樣,反正是循環麼,有多少個圖片,就new多少個ImageView就行了。

這個是參考Listview的機制,Listview在往下滑動的時候,item是不斷重用的。

附上源碼:

  1. package net.blogjava.mobile;  
  2.   
  3. import java.util.HashMap;  
  4.   
  5. import Android.app.Activity;  
  6. import android.content.Context;  
  7. import android.content.res.TypedArray;  
  8. import android.os.Bundle;  
  9. import android.view.View;  
  10. import android.view.ViewGroup;  
  11. import android.view.animation.AnimationUtils;  
  12. import android.widget.AdapterView;  
  13. import android.widget.AdapterView.OnItemClickListener;  
  14. import android.widget.BaseAdapter;  
  15. import android.widget.Gallery;  
  16. import android.widget.ImageSwitcher;  
  17. import android.widget.ImageView;  
  18. import android.widget.AdapterView.OnItemSelectedListener;  
  19. import android.widget.Gallery.LayoutParams;  
  20. import android.widget.ViewSwitcher.ViewFactory;  
  21.   
  22. public class Main extends Activity implements OnItemSelectedListener, ViewFactory, OnItemClickListener  
  23. {  
  24.     private Gallery gallery;  
  25.     private ImageSwitcher imageSwitcher;  
  26.     private ImageAdapter imageAdapter;  
  27.     private int mCurrentPos = -1;// 當前的item   
  28.     private HashMap<Integer, ImageView> mViewMap;  
  29.   
  30.     private int[] resIds = new int[]  
  31.         {R.drawable.item1 ,R.drawable.item2 ,R.drawable.item3 ,R.drawable.item4 ,R.drawable.item5 ,R.drawable.item6 ,R.drawable.item7 ,R.drawable.item8 ,R.drawable.item9 ,R.drawable.item10 ,R.drawable.item11 ,R.drawable.item12 ,R.drawable.item13 ,R.drawable.item14 ,R.drawable.item15};  
  32.   
  33.     @Override  
  34.     public void onCreate(Bundle savedInstanceState)  
  35.     {  
  36.         super.onCreate(savedInstanceState);  
  37.         setContentView(R.layout.main);  
  38.         gallery = (Gallery) findViewById(R.id.gallery);  
  39.         imageAdapter = new ImageAdapter(this, resIds.length);  
  40.         gallery.setAdapter(imageAdapter);  
  41.         gallery.setOnItemSelectedListener(this);  
  42.         gallery.setSelection(1);// 設置一加載Activity就顯示的圖片為第二張   
  43.   
  44.         gallery.setOnItemClickListener(this);  
  45.   
  46.         imageSwitcher = (ImageSwitcher) findViewById(R.id.imageswitcher);  
  47.         imageSwitcher.setFactory(this);  
  48.   
  49.         // 設置動畫效果 淡入淡出   
  50.         imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));  
  51.         imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));  
  52.     }  
  53.   
  54.     public class ImageAdapter extends BaseAdapter  
  55.     {  
  56.         int mGalleryItemBackground;  
  57.         private Context mContext;  
  58.         private int mCount;// 一共多少個item   
  59.   
  60.         public ImageAdapter(Context context, int count)  
  61.         {  
  62.             mContext = context;  
  63.             mCount = count;  
  64.             mViewMap = new HashMap<Integer, ImageView>(count);  
  65.             TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);  
  66.             // 設置邊框的樣式   
  67.             mGalleryItemBackground = typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0);  
  68.         }  
  69.   
  70.         public int getCount()  
  71.         {  
  72.             return Integer.MAX_VALUE;  
  73.         }  
  74.   
  75.         public Object getItem(int position)  
  76.         {  
  77.             return position;  
  78.         }  
  79.   
  80.         public long getItemId(int position)  
  81.         {  
  82.             return position;  
  83.         }  
  84.   
  85.         public View getView(int position, View convertView, ViewGroup parent)  
  86.         {  
  87.             ImageView imageview = mViewMap.get(position % mCount);  
  88.             if (imageview == null)  
  89.             {  
  90.                 imageview = new ImageView(mContext);  
  91.                 imageview.setImageResource(resIds[position % resIds.length]);  
  92.                 imageview.setScaleType(ImageView.ScaleType.FIT_XY);  
  93.                 imageview.setLayoutParams(new Gallery.LayoutParams(13688));  
  94.                 imageview.setBackgroundResource(mGalleryItemBackground);  
  95.             }  
  96.             return imageview;  
  97.         }  
  98.     }  
  99.   
  100.     // 滑動Gallery的時候,ImageView不斷顯示當前的item   
  101.     @Override  
  102.     public void onItemSelected(AdapterView<?> parent, View view, int position, long id)  
  103.     {  
  104.         // imageSwitcher.setImageResource(resIds[position % resIds.length]);   
  105.     }  
  106.   
  107.     // 設置點擊Gallery的時候才切換到該圖片   
  108.     @Override  
  109.     public void onItemClick(AdapterView<?> parent, View view, int position, long id)  
  110.     {  
  111.         if (mCurrentPos == position)  
  112.         {  
  113.             // 如果在顯示當前圖片,再點擊,就不再加載。   
  114.             return;  
  115.         }  
  116.         mCurrentPos = position;  
  117.         imageSwitcher.setImageResource(resIds[position % resIds.length]);  
  118.     }  
  119.   
  120.     @Override  
  121.     public void onNothingSelected(AdapterView<?> parent)  
  122.     {  
  123.     }  
  124.   
  125.     @Override  
  126.     public View makeView()  
  127.     {  
  128.         ImageView imageView = new ImageView(this);  
  129.         imageView.setBackgroundColor(0xFF000000);  
  130.         imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);  
  131.         imageView.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
  132.   
  133.         return imageView;  
  134.     }  
  135.   
  136. }  
Copyright © Linux教程網 All Rights Reserved