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

本文详细阐述了如何获取手机相册并实现图片多选功能,进而上传所选图片。通过集成Android-Universal-Image-Loader框架解决本地图片加载问题,有效避免了OOM异常。提供相册列表界面、适配器代码以及图片对象类,实现流畅的相册浏览与图片选择体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该项目实现的功能如下:
获取手机相册,点击每个相册之后进入该相册的图片列表界面,在图片列表界面可以实现图片多选,然后进入所选择的图片界面,在该界面内可以实现所选图片的上传等功能。
该项目最大特色:
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获取相册列表的实现及源码下载(四)

源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值