Android拿来系列之万能图片处理方案

Glide

导入依赖

//圆形  矩形图片 边框 
    compile 'cn.gavinliu.android.lib:ShapedImageView:0.8.5'
    //Glide
    compile 'com.github.bumptech.glide:glide:3.7.0'
    // Glide 的 各种图形加载无边框
    compile 'jp.wasabeef:glide-transformations:3.0.1'

CV三个类

/**
 * description: Glide清除缓存工具类
 * author: WDSG
 * date: 2017/3/27
 */
public class GlideCacheUtil {
    private static GlideCacheUtil mInstance;
    private static Context mContext;

    public static GlideCacheUtil getInstance(Context context) {
        if (null == mInstance) {
            mInstance = new GlideCacheUtil();
            mContext = context;
        }
        return mInstance;
    }

    public static void free() {
        mInstance = null;
        mContext = null;
    }

    // 获取Glide磁盘缓存大小
    public String getCacheSize() {
        try {
            return getFormatSize(getFolderSize(new File(mContext.getCacheDir() + "/" + GlideConfig.GLIDE_CARCH_DIR)));
        } catch (Exception e) {
            e.printStackTrace();
            return "获取失败";
        }
    }

    // 清除Glide磁盘缓存,自己获取缓存文件夹并删除方法
    public boolean cleanCatchDisk() {
        return deleteFolderFile(mContext.getCacheDir() + "/" + GlideConfig.GLIDE_CARCH_DIR, true);
    }

    // 清除图片磁盘缓存,调用Glide自带方法
    public boolean clearCacheDiskSelf() {
        try {
            if (Looper.myLooper() == Looper.getMainLooper()) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Glide.get(mContext).clearDiskCache();
                    }
                }).start();
            } else {
                Glide.get(mContext).clearDiskCache();
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    // 清除Glide内存缓存
    public boolean clearCacheMemory() {
        try {
            if (Looper.myLooper() == Looper.getMainLooper()) { //只能在主线程执行
                Glide.get(mContext).clearMemory();
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }


    // 获取指定文件夹内所有文件大小的和
    public long getFolderSize(File file) throws Exception {
        long size = 0;
        try {
            File[] fileList = file.listFiles();
            for (File aFileList : fileList) {
                if (aFileList.isDirectory()) {
                    size = size + getFolderSize(aFileList);
                } else {
                    size = size + aFileList.length();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return size;
    }

    // 格式化单位
    public static String getFormatSize(double size) {
        double kiloByte = size / 1024;
        if (kiloByte < 1) {
            return size + "Byte";
        }
        double megaByte = kiloByte / 1024;
        if (megaByte < 1) {
            BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
            return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB";
        }
        double gigaByte = megaByte / 1024;
        if (gigaByte < 1) {
            BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
            return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB";
        }
        double teraBytes = gigaByte / 1024;
        if (teraBytes < 1) {
            BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
            return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB";
        }
        BigDecimal result4 = new BigDecimal(teraBytes);
        return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB";
    }

    // 按目录删除文件夹文件方法
    public boolean deleteFolderFile(String filePath, boolean deleteThisPath) {
        try {
            File file = new File(filePath);
            if (file.isDirectory()) {
                File files[] = file.listFiles();
                for (File file1 : files) {
                    deleteFolderFile(file1.getAbsolutePath(), true);
                }
            }
            if (deleteThisPath) {
                if (!file.isDirectory()) {
                    file.delete();
                } else {
                    if (file.listFiles().length == 0) {
                        file.delete();
                    }
                }
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}
public class GlideConfig {
    // 图片缓存最大容量,150M,根据自己的需求进行修改
    public static final int GLIDE_CATCH_SIZE = 150 * 1000 * 1000;

    // 图片缓存子目录
    public static final String GLIDE_CARCH_DIR = "image_cache_app";

    public static int getGlideCatchSize() {
        return GLIDE_CATCH_SIZE;
    }

    public static String getGlideCarchDir() {
        return GLIDE_CARCH_DIR;
    }
}
public class GlideConfiguration implements GlideModule {
    //FIXME: 该配置类需要在AndroidManifest.xml中声明
    // <meta-data
    //    android:name="lib.self.network.image.glide.GlideModule.GlideConfiguration"
    //    android:value="GlideModule" />

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        //自定义Glide默认的Bitmap格式(加载图片的质量)
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);

        //自定义缓存目录
        builder.setDiskCache(new InternalCacheDiskCacheFactory(context,
                GlideConfig.GLIDE_CARCH_DIR, //缓存路径
                GlideConfig.GLIDE_CATCH_SIZE)); //缓存大小
    }


    @Override
    public void registerComponents(Context context, Glide glide, Registry registry) {

    }
}

清单

<meta-data
            android:name="com.as.demo7_4.GlideConfiguration"
            android:value="GlideModule" />

圆形圆角带边框

 <cn.gavinliu.android.lib.shapedimageview.ShapedImageView
        android:id="@+id/imageView"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:scaleType="fitXY"
        app:round_radius="10dp"
        app:shape_mode="round_rect"
        android:src="@mipmap/ic_launcher"
        app:stroke_color="@color/colorAccent"
        app:stroke_width="2dp" />

加载不同的形状

 

 

 

 

猜你喜欢

转载自blog.csdn.net/FlyPig_Vip/article/details/81182674