当前位置: 代码迷 >> Android >> android 获取相本列表的实现及源码下载(三)
  详细解决方案

android 获取相本列表的实现及源码下载(三)

热度:56   发布时间:2016-04-28 02:06:56.0
android 获取相册列表的实现及源码下载(三)

该项目实现的功能如下:
获取手机相册,点击每个相册之后进入该相册的图片列表界面,在图片列表界面可以实现图片多选,然后进入所选择的图片界面,在该界面内可以实现所选图片的上传等功能。
该项目最大特色:
1、获取相册列表,目前网络上面介绍获取相册的项目很少,本文专门讲述相册的获取。
2、使用Android-Universal-Image-Loader集成框架-第三方jar包加载本地图片,熟悉这个jar的开发者肯定不陌生,该jar包十分强大,除了可以获取网络图片,本地图片也是可以的。同时,通过引用第三方jar可以有效解决OOM异常问题。
本篇博文接上面两篇博文
android 获取相册列表的实现及源码下载(一)
android 获取相册列表的实现及源码下载(二)
android获取相册列表的实现及源码下载(四)
继续讲述相册内图片列表界面的实现,首先给出相册列表界面Acitivity类代码:

public class AlbumItemActivity extends Activity implements OnClickListener{    private GridView gridView;    private TextView back,ok;    private PhotoUpImageBucket photoUpImageBucket;    private ArrayList<PhotoUpImageItem> selectImages;    private AlbumItemAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.album_item_images);        init();        setListener();    }    private void init(){        gridView = (GridView) findViewById(R.id.album_item_gridv);        back = (TextView) findViewById(R.id.back);        ok = (TextView) findViewById(R.id.sure);        selectImages = new ArrayList<PhotoUpImageItem>();        Intent intent = getIntent();        photoUpImageBucket = (PhotoUpImageBucket) intent.getSerializableExtra("imagelist");        adapter = new AlbumItemAdapter(photoUpImageBucket.getImageList(), AlbumItemActivity.this);        gridView.setAdapter(adapter);    }    private void setListener(){        back.setOnClickListener(this);        ok.setOnClickListener(this);        gridView.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {                CheckBox checkBox = (CheckBox) view.findViewById(R.id.check);                photoUpImageBucket.getImageList().get(position).setSelected(                        !checkBox.isChecked());                adapter.notifyDataSetChanged();                if (photoUpImageBucket.getImageList().get(position).isSelected()) {                    if (selectImages.contains(photoUpImageBucket.getImageList().get(position))) {                    }else {                        selectImages.add(photoUpImageBucket.getImageList().get(position));                    }                }else {                    if (selectImages.contains(photoUpImageBucket.getImageList().get(position))) {                        selectImages.remove(photoUpImageBucket.getImageList().get(position));                    }else {                    }                }            }        });    }    @Override    protected void onDestroy() {        super.onDestroy();    }    @Override    public void onClick(View v) {        switch (v.getId()) {        case R.id.back:            finish();            break;        case R.id.sure:            Intent intent = new Intent(AlbumItemActivity.this,SelectedImagesActivity.class);            intent.putExtra("selectIma", selectImages);            startActivity(intent);            break;        default:            break;        }    }}

下面给出适配器代码:

public class AlbumItemAdapter extends BaseAdapter {    private List<PhotoUpImageItem> list;//存放所选相册里面的图片列表    private LayoutInflater layoutInflater;    private ImageLoader imageLoader;//图片加载器    private DisplayImageOptions options;//图片加载器的设置    public AlbumItemAdapter(List<PhotoUpImageItem> list,Context context){        this.list = list;        layoutInflater = LayoutInflater.from(context);        imageLoader = ImageLoader.getInstance();        // 使用DisplayImageOption.Builder()创建DisplayImageOptions        options = new DisplayImageOptions.Builder()                .showStubImage(R.drawable.album_default_loading_pic)                 // 设置图片下载期间显示的图片                .showImageForEmptyUri(R.drawable.album_default_loading_pic)                 // 设置图片Uri为空或是错误的时候显示的图片                .showImageOnFail(R.drawable.album_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_images_item_view, parent, false);            holder = new Holder();            holder.imageView = (ImageView) convertView.findViewById(R.id.image_item);            holder.checkBox = (CheckBox) convertView.findViewById(R.id.check);            convertView.setTag(holder);        }else {            holder = (Holder) convertView.getTag();        }        //图片加载器的使用代码,就这一句代码即可实现图片的加载。请注意        //这里的uri地址,因为我们现在实现的是获取本地图片,所以使        //用"file://"+图片的存储地址。如果要获取网络图片,        //这里的uri就是图片的网络地址。        imageLoader.displayImage("file://"+list.get(position).getImagePath(), holder.imageView, options);        holder.checkBox.setChecked(list.get(position).isSelected());        return convertView;    }    class Holder{        ImageView imageView;        CheckBox checkBox;    }}

图片列表界面的适配器比较简单,获取数据之后进行加载即可。这里面用到了相册对象类PhotoUpImageBucket,该类代码如下:

/** * 一个目录下的相册对象 */public class PhotoUpImageBucket implements Serializable{    public int count = 0;    public String bucketName;    public List<PhotoUpImageItem> 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<PhotoUpImageItem> getImageList() {        return imageList;    }    public void setImageList(List<PhotoUpImageItem> 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;    }}

把每个相册和每个图片创建为对象方便维护和更加简便的开发,如果后期增加什么功能,在对象的基础上开发会很大程度上带来方便。
另外两篇博文链接:
android 获取相册列表的实现及源码下载(一)
android 获取相册列表的实现及源码下载(二)
android获取相册列表的实现及源码下载(四)

源码下载

  相关解决方案