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