主要實現的功能就是浏覽圖片。
用到的控件:ImageSwitcher和Gallery。
推薦閱讀:Android音樂播放器:使用Android系統自帶的數據庫 http://www.linuxidc.com/Linux/2011-10/45048.htm
這種簡單的圖片浏覽器網上有很多,我也是參考網上寫的。但是我做了一些優化:
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;
- }
-
- }