Android图片浏览器


主要实现的功能就是浏览图片。

用到的控件:ImageSwitcher和Gallery。

推荐阅读:Android音乐播放器:使用Android系统自带的数据库

这种简单的图片浏览器网上有很多,我也是参考网上写的。但是我做了一些优化:

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. }  
  • 1
  • 2
  • 下一页

相关内容