天天看點

ListView形式預覽圖檔

ListView形式預覽圖檔
public class Main extends Activity implements OnItemClickListener {
	private ListView listView;// 裝載縮小的圖檔
	private ImageAdapter imageAdapter;
	public static int imagePosition;// 圖檔的下标
	public static Uri[] imageUri;// 圖檔的URL

	public static List<String> imagePaths;// 存放圖檔路徑的List
	public String fileName[];
	Bitmap bitmap = null;// 原位圖

	Bitmap smallbitmap = null;// 縮小的位圖

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
		setTitle("相冊浏覽——ListView");
		setTitleColor(Color.YELLOW);
		setContentView(R.layout.main);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);

		setProgressBarIndeterminateVisibility(true);// 顯示标題欄的進度圈
		initView();// 初始化
		final Object data = getLastNonConfigurationInstance();// 得到橫屏時臨時存儲的資料
		if (data == null) {// 為空重新加載
			new getImagesFromSD().execute();
		} else {
			final LoadedImage[] photos = (LoadedImage[]) data;
			if (photos.length == 0) {
				new getImagesFromSD().execute();
			}
			for (LoadedImage photo : photos) {
				addImage(photo);
			}
		}

	}

	// 初始化
	private void initView() {
		imagePaths = Utils.getImagePathFromSDCard();// 獲得圖檔路徑
		listView = (ListView) findViewById(R.id.test_lv);
		imageAdapter = new ImageAdapter(getApplicationContext());
		listView.setAdapter(imageAdapter);
	}

	private void addImage(LoadedImage... value) {
		for (LoadedImage image : value) {
			imageAdapter.addPhoto(image);// 把圖檔添加到擴充卡裡面,以便調整圖檔的屬性
			imageAdapter.notifyDataSetChanged();
		}
	}

	// 讀取sdcard上的圖檔
	class getImagesFromSD extends AsyncTask<Object, LoadedImage, Object> {
		protected Object doInBackground(Object... params) {

			imageUri = new Uri[imagePaths.size()];// 聲明imageUri的長度
			for (int i = 0; i < imagePaths.size(); i++) {
				String path = imagePaths.get(i);
				BitmapFactory.Options options = new BitmapFactory.Options();
				options.inSampleSize = 5;
				bitmap = BitmapFactory.decodeFile(path, options);
				if (bitmap != null) {
					smallbitmap = Bitmap.createScaledBitmap(bitmap, 60, 60,
							true);// 将原來的位圖縮小
					bitmap.recycle();// 釋放記憶體
					if (smallbitmap != null) {
						publishProgress(new LoadedImage(smallbitmap));
					}
				}
			}
			return null;
		}

		@Override
		public void onProgressUpdate(LoadedImage... value) {
			addImage(value);
		}

		// 當加載完時停止标題欄的進度圈
		@Override
		protected void onPostExecute(Object result) {
			setProgressBarIndeterminateVisibility(false);
		}
	}

	// 自定義圖檔擴充卡
	class ImageAdapter extends BaseAdapter {
		private Context mContext;
		private ArrayList<LoadedImage> photos = new ArrayList<LoadedImage>();

		public ImageAdapter(Context context) {
			mContext = context;
		}

		public void addPhoto(LoadedImage photo) {// 把圖檔添加到數組
			photos.add(photo);
		}

		public int getCount() {// 得到圖檔數量
			return photos.size();
		}

		public Object getItem(int position) {
			return photos.get(position);
		}

		public long getItemId(int position) {
			return position;
		}

		public View getView(int position, View convertView, ViewGroup parent) {
			LinearLayout linearLayout = new LinearLayout(mContext);// 建立LinearLayout
			linearLayout.setOrientation(LinearLayout.HORIZONTAL);
			linearLayout.setPadding(10, 2, 2, 2);
			linearLayout.setGravity(Gravity.LEFT);

			ImageView imageView = new ImageView(mContext); // 建立ImageView
			imageView.setAdjustViewBounds(true);
			imageView.setScaleType(ImageView.ScaleType.CENTER);
			imageView.setPadding(2, 2, 2, 2);// 控制圖檔距離視窗的位置
			imageView.setImageBitmap(photos.get(position).getBitmap());

			TextView textView = new TextView(mContext);// 建立TextextViewiew
			textView.setPadding(10, 2, 2, 2);
			textView.setTextSize(17);
			textView.setTextColor(Color.YELLOW);
			textView.setLayoutParams(new LinearLayout.LayoutParams(
					LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
			textView.setText(Utils.getName(imagePaths.get(position))); // 設定TextextViewiew顯示的内容

			linearLayout.addView(imageView); // 将ImageView添加到線性布局中
			linearLayout.addView(textView);// 将textView添加到線性布局中
			return linearLayout;
		}
	}

	// 加載圖檔
	private static class LoadedImage {
		Bitmap mBitmap;

		LoadedImage(Bitmap bitmap) {
			mBitmap = bitmap;
		}

		public Bitmap getBitmap() {
			return mBitmap;
		}
	}

	// 圖檔點選監聽
	public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
		imagePosition = position;// 把圖檔位置賦給靜态變量imagePosition,友善後面調用
		// Intent intent = new Intent(Main.this, GalleryImage.class);// 跳轉到大圖浏覽
		// startActivity(intent);
	}

}
           

繼續閱讀