天天看点

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);
	}

}
           

继续阅读