Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 獲取相冊列表的實現

android 獲取相冊列表的實現

編輯:關於Android編程

該項目實現的功能如下:
獲取手機相冊,點擊每個相冊之後進入該相冊的圖片列表界面,在圖片列表界面可以實現圖片多選,然後進入所選擇的圖片界面,在該界面內可以實現所選圖片的上傳等功能。
該項目最大特色:
1、獲取相冊列表,目前網絡上面介紹獲取相冊的項目很少,本文專門講述相冊的獲取。
2、使用Android-Universal-Image-Loader集成框架-第三方jar包加載本地圖片,熟悉這個jar的開發者肯定不陌生,該jar包十分強大,除了可以獲取網絡圖片,本地圖片也是可以的。同時,通過引用第三方jar可以有效解決OOM異常問題。

繼續講述相冊內圖片列表界面的實現,首先給出相冊列表界面Acitivity類代碼:

public class AlbumItemActivity extends Activity {

    private GridView gridView;
    private PhotoUpImageBucket photoUpImageBucket;
    //相冊對象,相冊內部保存了該相冊內部的圖片列表
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.album_item);
        init();//初始化
        setListener();//設置監聽器
    }
    private void init(){
        gridView = (GridView) findViewById(R.id.album_item_gridv);

        Intent intent = getIntent();
        photoUpImageBucket = (PhotoUpImageBucket) intent.getSerializableExtra(imagelist);
        AlbumItemAdapter adapter = new AlbumItemAdapter(photoUpImageBucket.getImageList(), AlbumItemActivity.this);
        gridView.setAdapter(adapter);
    }
    private void setListener(){
        gridView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view,
                    int position, long id) {
                Toast.makeText(AlbumItemActivity.this, 選中了+position, Toast.LENGTH_SHORT).show();
            }
        });
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

下面給出適配器代碼:

public class AlbumItemAdapter extends BaseAdapter {
    private List list;
    private LayoutInflater layoutInflater;
    private ImageLoader imageLoader;//圖片加載器
    private DisplayImageOptions options;
    public AlbumItemAdapter(List list,Context context){
        this.list = list;
        layoutInflater = LayoutInflater.from(context);
        imageLoader = ImageLoader.getInstance();
// 使用DisplayImageOption.Builder()創建DisplayImageOptions
        options = new DisplayImageOptions.Builder()
                .showStubImage(R.drawable.default_loading_pic) 
                // 設置圖片下載期間顯示的圖片
                .showImageForEmptyUri(R.drawable.default_loading_pic) // 設置圖片Uri為空或是錯誤的時候顯示的圖片
                .showImageOnFail(R.drawable.default_loading_pic)
                 // 設置圖片加載或解碼過程中發生錯誤顯示的圖片
                .cacheInMemory(true) 
                // 設置下載的圖片是否緩存在內存中
                .cacheOnDisc(true) 
                // 設置下載的圖片是否緩存在SD卡中
                // .displayer(new RoundedBitmapDisplayer(20)) // 設置成圓角圖片
                .bitmapConfig(Config.ARGB_8888)
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
                .build(); 
                // 創建配置過的DisplayImageOption對象
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Holder holder;
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.album_item_image_view, parent, false);
            holder = new Holder();
            holder.imageView = (ImageView) convertView.findViewById(R.id.image_item);
            convertView.setTag(holder);
        }else {
            holder = (Holder) convertView.getTag();
        }
//圖片加載器的使用代碼,就這一句代碼即可實現圖片的加載。請注意
//這裡的uri地址,因為我們現在實現的是獲取本地圖片,所以使
//用file://+圖片的存儲地址。如果要獲取網絡圖片,
//這裡的uri就是圖片的網絡地址。
        imageLoader.displayImage(file://+list.get(position).getImagePath(), holder.imageView, options);
        return convertView;
    }

    class Holder{
        ImageView imageView;
    }
}

圖片列表界面的適配器比較簡單,獲取數據之後進行加載即可。這裡面用到了相冊對象類PhotoUpImageBucket,該類代碼如下:

/**
 * 一個目錄下的相冊對象
 */
public class PhotoUpImageBucket implements Serializable{

    public int count = 0;
    public String bucketName;
    public List imageList;
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public String getBucketName() {
        return bucketName;
    }
    public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
    }
    public List getImageList() {
        return imageList;
    }
    public void setImageList(List imageList) {
        this.imageList = imageList;
    }

}

同時代碼中也是用到了圖片對象類PhotoUpImageItem,該類代碼如下:

public class PhotoUpImageItem implements Serializable {
    //圖片ID
    private String imageId;
    //原圖路徑
    private String imagePath;
    //是否被選擇
    private boolean isSelected = false;

    public String getImageId() {
        return imageId;
    }
    public void setImageId(String imageId) {
        this.imageId = imageId;
    }
    public String getImagePath() {
        return imagePath;
    }
    public void setImagePath(String imagePath) {
        this.imagePath = imagePath;
    }
    public boolean isSelected() {
        return isSelected;
    }
    public void setSelected(boolean isSelected) {
        this.isSelected = isSelected;
    }
}

把每個相冊和每個圖片創建為對象方便維護和更加簡便的開發,如果後期增加什麼功能,在對象的基礎上開發會很大程度上帶來方便。
 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved