第四周(2)

本次主要实现图片和文件夹的属性描述和设置类,以及读取SD卡图片列表工具类。

1.重点是读取SD卡图片列表并保存到相应的list

public class ImageUtils {

    public static void loadImageList(final Context context, final OnLoadImageCallBack callBack) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                ContentResolver resolver = context.getContentResolver();
                Cursor cursor = resolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                        new String[]{MediaStore.Images.ImageColumns._ID,
                                MediaStore.Images.ImageColumns.DATA,
                                MediaStore.Images.ImageColumns.DISPLAY_NAME,
                                MediaStore.Images.ImageColumns.SIZE,
                                MediaStore.Images.ImageColumns.DATE_ADDED},
                        null, null, MediaStore.Images.ImageColumns.DATE_ADDED + " desc");
                List<ImageBean> imageBeans = new ArrayList<>();
                if (cursor != null) {
                    ImageBean bean;
                    while (cursor.moveToNext()) {
                        long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID));
                        String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA));
                        String name = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DISPLAY_NAME));
                        long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.ImageColumns.SIZE));
                        long date = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATE_ADDED));
                        bean = new ImageBean(id, name, path, size, date);
                        imageBeans.add(bean);
                    }
                    cursor.close();
                }
                callBack.callBack(splitImage2Folder(imageBeans));
            }
        }).start();
    }

    private static List<FolderBean> splitImage2Folder(List<ImageBean> imageList) {
        List<FolderBean> folderList = new ArrayList<>();
        if (!imageList.isEmpty()) {

            // 生成全部图片文件夹
            FolderBean allFolder = new FolderBean("全部图片");
            for (ImageBean bean : imageList){
                if (bean.getSize() > 50 * 1024){
                    allFolder.addImage(bean);
                }
            }
            folderList.add(allFolder);

            // 根据图片路径划分文件夹
            for (int i = 0; i < imageList.size(); i++) {
                String path = imageList.get(i).getPath();
                String name = getFolderName(path);
                if (!TextUtils.isEmpty(name)) {
                    FolderBean folder = getFolder(name, folderList);
                    folder.addImage(imageList.get(i));
                }
            }
        }

        return folderList;
    }

    private static String getFolderName(String path) {
        if (!TextUtils.isEmpty(path)) {
            String[] strings = path.split(File.separator);
            if (strings.length >= 2) {
                return strings[strings.length - 2];
            }
        }
        return "";
    }

    private static FolderBean getFolder(String name, List<FolderBean> folders) {
        for (int i = 0; i < folders.size(); i++) {
            FolderBean folder = folders.get(i);
            if (name.equals(folder.getName())) {
                return folder;
            }
        }
        FolderBean newFolder = new FolderBean(name);
        folders.add(newFolder);
        return newFolder;
    }

    public interface OnLoadImageCallBack {
        void callBack(List<FolderBean> folderList);
    }

}
loadImageList主要用于新建一个线程,该线程在后台读取所有的图片并记录下其基本信息放到ImageBean中
bean = new ImageBean(id, name, path, size, date);

将所有的ImageBean都加到一个列表中,并用splitImage2Folder方法将所有图片划分到不同文件夹。所有过程完成后该线程产生一个callBack。

2.该过程中用到的ImageBean和FolderBean

public class ImageBean implements Serializable{

    private long id;
    private String name;
    private String path;
    private long size;
    private long date;
    private boolean isSelected = false;

    public ImageBean() {
    }

    public ImageBean(long id, String name, String path, long size, long date) {
        this.id = id;
        this.name = name;
        this.path = path;
        this.size = size;
        this.date = date;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public long getSize() {
        return size;
    }

    public void setSize(long size) {
        this.size = size;
    }

    public long getDate() {
        return date;
    }

    public void setDate(long date) {
        this.date = date;
    }

    public boolean isSelected() {
        return isSelected;
    }

    public void setSelected(boolean selected) {
        isSelected = selected;
    }
}


public class FolderBean {

    private String name;
    private List<ImageBean> mImageList;
    private boolean isSelected = false;

    public FolderBean(String name) {
        this.name = name;
    }

    public FolderBean(String name, List<ImageBean> imageList) {
        this.name = name;
        mImageList = imageList;
    }

    public void addImage(ImageBean imageBean){
        if (mImageList == null){
            mImageList = new ArrayList<>();
        }
        mImageList.add(imageBean);
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<ImageBean> getImageList() {
        return mImageList;
    }

    public void setImageList(List<ImageBean> imageList) {
        mImageList = imageList;
    }

    public boolean isSelected() {
        return isSelected;
    }

    public void setSelected(boolean selected) {
        isSelected = selected;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值