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