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只是平时用来代码说明用。
效果图: