Android图片浏览器
Android图片浏览器
主要实现的功能就是浏览图片。
用到的控件:ImageSwitcher和Gallery。
推荐阅读:Android音乐播放器:使用Android系统自带的数据库
这种简单的图片浏览器网上有很多,我也是参考网上写的。但是我做了一些优化:
1、网上基本都是加载进来显示这样的页面:
下面的Gallery不对称。我做了优化,加载的时候是把左边黑色的空白也铺上了。如下:
2、可能这个地方不算是优化,我看别人的程序都是在滑动的时候,ImageSwitcher会不断的变化,会不会很消耗资源?(只是换个方法实现变化而已,所以算不得优化)。我改成了只有停下来,你点击那一张,ImageSwitcher才会变化。
3、这个地方个人觉得还有有必要改一下的,我是参考了Listview的机制,实现的功能都是让图片无限滑动,
这个是在Adapter中这么写的:
- public int getCount()
- {
- return Integer.MAX_VALUE;
- }
让它最大值是最大整数,基本上是滑不到尽头的。
这个是很正常的功能,但是每滑动一次就会
ImageView imageview = new ImageView(mContext);
这样会new无数了ImageView对象,完全是没必要的。
我们可以这样,反正是循环么,有多少个图片,就new多少个ImageView就行了。
这个是参考Listview的机制,Listview在往下滑动的时候,item是不断重用的。
附上源码:
- package net.blogjava.mobile;
- import java.util.HashMap;
- import Android.app.Activity;
- import android.content.Context;
- import android.content.res.TypedArray;
- import android.os.Bundle;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.animation.AnimationUtils;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.BaseAdapter;
- import android.widget.Gallery;
- import android.widget.ImageSwitcher;
- import android.widget.ImageView;
- import android.widget.AdapterView.OnItemSelectedListener;
- import android.widget.Gallery.LayoutParams;
- import android.widget.ViewSwitcher.ViewFactory;
- public class Main extends Activity implements OnItemSelectedListener, ViewFactory, OnItemClickListener
- {
- private Gallery gallery;
- private ImageSwitcher imageSwitcher;
- private ImageAdapter imageAdapter;
- private int mCurrentPos = -1;// 当前的item
- private HashMap<Integer, ImageView> mViewMap;
- private int[] resIds = new int[]
- {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};
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- gallery = (Gallery) findViewById(R.id.gallery);
- imageAdapter = new ImageAdapter(this, resIds.length);
- gallery.setAdapter(imageAdapter);
- gallery.setOnItemSelectedListener(this);
- gallery.setSelection(1);// 设置一加载Activity就显示的图片为第二张
- gallery.setOnItemClickListener(this);
- imageSwitcher = (ImageSwitcher) findViewById(R.id.imageswitcher);
- imageSwitcher.setFactory(this);
- // 设置动画效果 淡入淡出
- imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
- imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
- }
- public class ImageAdapter extends BaseAdapter
- {
- int mGalleryItemBackground;
- private Context mContext;
- private int mCount;// 一共多少个item
- public ImageAdapter(Context context, int count)
- {
- mContext = context;
- mCount = count;
- mViewMap = new HashMap<Integer, ImageView>(count);
- TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
- // 设置边框的样式
- mGalleryItemBackground = typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0);
- }
- public int getCount()
- {
- return Integer.MAX_VALUE;
- }
- public Object getItem(int position)
- {
- return position;
- }
- public long getItemId(int position)
- {
- return position;
- }
- public View getView(int position, View convertView, ViewGroup parent)
- {
- ImageView imageview = mViewMap.get(position % mCount);
- if (imageview == null)
- {
- imageview = new ImageView(mContext);
- imageview.setImageResource(resIds[position % resIds.length]);
- imageview.setScaleType(ImageView.ScaleType.FIT_XY);
- imageview.setLayoutParams(new Gallery.LayoutParams(136, 88));
- imageview.setBackgroundResource(mGalleryItemBackground);
- }
- return imageview;
- }
- }
- // 滑动Gallery的时候,ImageView不断显示当前的item
- @Override
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
- {
- // imageSwitcher.setImageResource(resIds[position % resIds.length]);
- }
- // 设置点击Gallery的时候才切换到该图片
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id)
- {
- if (mCurrentPos == position)
- {
- // 如果在显示当前图片,再点击,就不再加载。
- return;
- }
- mCurrentPos = position;
- imageSwitcher.setImageResource(resIds[position % resIds.length]);
- }
- @Override
- public void onNothingSelected(AdapterView<?> parent)
- {
- }
- @Override
- public View makeView()
- {
- ImageView imageView = new ImageView(this);
- imageView.setBackgroundColor(0xFF000000);
- imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
- imageView.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
- return imageView;
- }
- }
|
评论暂时关闭