Android MarkDownView中显示gif图片

来源:互联网 发布:淘宝卖什么吃的赚钱 编辑:程序博客网 时间:2024/05/16 13:47

MarkedView(这个控件搜一下 找不到联系我。支持在Android中显示MarkDown语法的控件)中只能加载sd卡中的图片,所以要把资源文件下的图片文件通过代码的方式拷贝到sd卡中。

下面是完整代码:

/**     * 需要存储在sd卡中的文件类型     */    private static final String[] imageType = {"gif", "jpg", "png"};    private static final String markDownPath = "markDown";
 /**     * 将assests文件夹下的文件根据文件类型{@link #imageType} 存储到sd卡中     *     * @param context     */    public static void copyFileFromAssToSd(Context context) {        for (int i = 0; i < imageType.length; i++) {            getAllResInAssests(context, imageType[i]);        }    }
/**     * 获取assests下的所有资源文件     * 如果文件类型是文件 将会把此文件拷贝到sd卡中     *     * @param context    上下文     * @param assestsDir assets文件夹下的子文件夹     */    public static void getAllResInAssests(Context context, String assestsDir) {        AssetManager assetManager = context.getAssets();        try {            //遍历path文件夹下的所有文件            String[] files = assetManager.list(assestsDir);            for (int i = 0; i < files.length; i++) {                String fileName = files[i];                //如果是文件                if (fileName.contains(".")) {                    copyToSD(context, fileName, assestsDir);                }            }        } catch (IOException e) {            e.printStackTrace();        }    }
/**     * 说明:此方法用于将assests文件夹下的gif或者其他资源文件保存到sd卡。     *     * @param context    上下文对象     * @param fileName   资源文件id  文件名 eg:share.gif     * @param assestsDir 资源文件所在文件夹 eg:gif     */    public static void copyToSD(Context context, String fileName, String assestsDir) {        File file;        InputStream is = null;        FileOutputStream fos = null;        try {            String path = context.getExternalCacheDir().getPath();            //文件在sd卡中的存储路径            path = path +"/"+ markDownPath;            //文件在sd卡中存储的路径及名称            String dbPathAndName = path + "/" + fileName;            file = new File(path);            if (file.exists() == false) {                file.mkdir();            }            File dbFile = new File(dbPathAndName);            if (!dbFile.exists()) {                //根据asestsDir文件夹下的文件 获得输入流                is = context.getAssets().open(assestsDir + "/" + fileName);                fos = new FileOutputStream(dbFile);                byte[] buffer = new byte[8 * 1024];// 8K                while (is.read(buffer) > 0) {                    fos.write(buffer);                }            }        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (is != null) {                    is.close();                }                if (fos != null) {                    fos.close();                }            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }

将assest下的文件拷贝到sd卡中得调用方式

 ShowImageInMarkDownUtils.copyFileFromAssToSd(this);

删除sd卡中存在但是assest下不存在的文件的调用方式

 ShowImageInMarkDownUtils.deleteUnuseableInSdcard(this);

我们做这个markView只是平时用来代码说明用。
效果图:
这里写图片描述