Android MarkDownView中显示gif图片

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只是平时用来代码说明用。
效果图:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值