加载本地svg图片:

SVGParserRenderer norDrawable =
OtherPageConfigsManager.getInstance().getSVGParserRenderer(this,map.get("iconUrlNor")); public SVGParserRenderer getSVGParserRenderer(Context context, String svgPath){
String config = "";
if(iconLoadPathType == SAVE_TYPE_ASSETS)//本地存储位置
config = FileSystem.getFromAssets(context, "panelConfigFolder/"+svgPath);
else if(iconLoadPathType == SAVE_TYPE_SDCARD)//SDK存储位置
config = "";//"file://"+FileSystem.getCacheRootDir(context, "").getPath()+ url;
else if(iconLoadPathType == SAVE_TYPE_SYSTEM_DATA_FOLDER)//内部文件系统存储位置
//modify by chris.lei 添加中台未配发右侧在线客服图标导致从内部文件中读取不到信息客户端首页显示空白的问题
config = FileSystem.readFromFile(context,
getConfigFile(context, "panelConfigFolder", svgPath).getPath());
if(config == ""){
config = FileSystem.getFromAssets(context, "panelConfigFolder/"+svgPath);
}
return SvgRes1.getSVGParserRenderer(context, config);//从配置文件获取
} public static SVGParserRenderer getSVGParserRenderer(Context context, String svgContent) {
return svgContent != null && !svgContent.equals("")?new SVGParserRenderer(context, parseCssStyleToSvg(svgContent)):null;
} public static String parseCssStyleToSvg(String svgContent) {
int startIndex = svgContent.indexOf("<style");
int endIndex = svgContent.indexOf("</style>") + "</style>".length();
String styleStr = null;
if(startIndex >= 0 && endIndex >= 0) {
styleStr = svgContent.substring(startIndex, endIndex); // styleStr = <style type="text/css"><![CDATA[.strokeColor{fill:#B0B0B0;}]]></style> if(styleStr != null && !styleStr.equals("")) {
int startIndex1 = styleStr.indexOf(".");
int endIndex1 = styleStr.lastIndexOf(".");
int endendIndex = styleStr.lastIndexOf(";}") + ";}".length();
String colorStr;
if(startIndex1 == endIndex1) {
colorStr = styleStr.substring(startIndex1 + ".".length(), endendIndex);
} else {
colorStr = styleStr.substring(startIndex1, endendIndex);
}
//colorStr = strokeColor{fill:#B0B0B0;}
String[] fillColorArr = colorStr.split(";");
if(fillColorArr != null) {
for(int i = 0; i < fillColorArr.length; ++i) {
if(fillColorArr[i].contains("fill:")) {
String[] nameColorArr = fillColorArr[i].split("fill:");
if(nameColorArr != null) {
int nameStartIndex = nameColorArr[0].indexOf(".") + ".".length();
String name = nameColorArr[0].substring(nameStartIndex, nameColorArr[0].length() - 1);
String color = nameColorArr[1];
if(svgContent.contains("class=\"" + name + "\"")) {
svgContent = svgContent.replace("class=\"" + name + "\"", "fill=\"" + color + "\"");
}
}
}
}
}
} svgContent = svgContent.replace(styleStr, "");
} return svgContent;
} parseCssStyleToSvg的行参 svgContent =
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
<style type="text/css">
<![CDATA[
.strokeColor{fill:#B0B0B0;}
]]>
</style>
<path class="strokeColor" d="M3.494,24c0-0.587,0.476-1.063,1.063-1.063h38.886c0.588,0,1.063,0.476,1.063,1.063l0,0
c0,0.587-0.475,1.062-1.063,1.062H4.557C3.97,25.063,3.494,24.587,3.494,24L3.494,24z"/>
<g>
<g>
<g>
<path class="strokeColor" d="M3.806,23.249c0.415-0.414,1.088-0.414,1.502,0l17.054,17.053c0.415,0.415,0.415,1.087,0,1.503l0,0
c-0.415,0.414-1.088,0.414-1.503,0L3.806,24.751C3.391,24.336,3.391,23.665,3.806,23.249L3.806,23.249z"/>
</g>
<g>
<path class="strokeColor" d="M22.361,6.196c0.415,0.415,0.415,1.087,0,1.502L5.308,24.751c-0.414,0.415-1.087,0.415-1.502,0l0,0
c-0.415-0.415-0.415-1.087,0-1.503L20.858,6.196C21.273,5.781,21.946,5.781,22.361,6.196L22.361,6.196z"/>
</g>
</g>
</g>
</svg> 返回 svgContent = <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
<path fill="#B0B0B0" d="M3.494,24c0-0.587,0.476-1.063,1.063-1.063h38.886c0.588,0,1.063,0.476,1.063,1.063l0,0
c0,0.587-0.475,1.062-1.063,1.062H4.557C3.97,25.063,3.494,24.587,3.494,24L3.494,24z"/>
<g>
<g>
<g>
<path fill="#B0B0B0" d="M3.806,23.249c0.415-0.414,1.088-0.414,1.502,0l17.054,17.053c0.415,0.415,0.415,1.087,0,1.503l0,0
c-0.415,0.414-1.088,0.414-1.503,0L3.806,24.751C3.391,24.336,3.391,23.665,3.806,23.249L3.806,23.249z"/>
</g>
<g>
<path fill="#B0B0B0" d="M22.361,6.196c0.415,0.415,0.415,1.087,0,1.502L5.308,24.751c-0.414,0.415-1.087,0.415-1.502,0l0,0
c-0.415-0.415-0.415-1.087,0-1.503L20.858,6.196C21.273,5.781,21.946,5.781,22.361,6.196L22.361,6.196z"/>
</g>
</g>
</g>
</svg>

下载网络svg图片:

if (norDrawable == null) {
panelConfigsDownloader.startDownloadForSvgIcon(this,
OtherPageConfigsManager.getInstance(),
map.get("downloadUrl") + norFilePath, saveNorFilePath,
new SvgIconOnDownloadCompleteListener(
mKdsShortcutView[index], map, "iconUrlNor"));
} public void startDownloadForSvgIcon(Context context,ConfigsManager configsManager,String svgDownloadUrl,
String svgFilePath,
OnDownloadCompleteListener onDownloadCompleteListener){
//下载配置文件
String parentFolder = configsManager.mConfigInfo.saveFolderName+"/"; //parentFolder = panelConfigFolder/
String fileName = "";
if(svgFilePath != null && !svgFilePath.equals("")){ //svgFilePath = ueditor/1431988818264.svg
String[] saveFileDir = svgFilePath.split("/");
for(int i = 0; i < saveFileDir.length; i++){
if(saveFileDir[i].contains(".")){
fileName = saveFileDir[i]; //fileName = 1431988818264.svg
continue;
}
parentFolder += saveFileDir[i]; //parentFolder = panelConfigFolder/ueditor
}
}else{
return;//说明不是需要下载的文件
} File file = configsManager.getConfigFile(context, parentFolder, fileName); //file = panelConfigFolder/ueditor/1431988818264.svg
DownloadConfigFileThread downloadConfigFileThread =
new DownloadConfigFileThread(context, svgDownloadUrl, file,
onDownloadCompleteListener);
if(!file.isDirectory() && !file.exists()) {//考虑已经存在同样名字的文件或者目录,
//Logger.d("downloadConfigFile", "startDownloadForSvgIcon exists:"+file.exists());
downloadConfigFileThread.start();//开始下载
}else{
Logger.i("快捷按钮配置文件", "警告:该文件存在相同文件名,不进行下载更新,请知晓!");
downloadConfigFileThread.onDownloadComplete();//已经存在也视为完成
}
} public class DownloadConfigFileThread extends Thread
{
public synchronized void run()
{
try
{
URL url = new URL(downurl);// http://113.78.134.110:21800/api/config/app/ui/otherpage/online/66099/100000
// 创建连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
conn.connect();
// 获取文件大小
int length = conn.getContentLength();//40674
// 创建输入流
InputStream is = conn.getInputStream();
//处理文件路径不存在的问题
String dirFilePath = configFile.getPath();// /data/data/dongzheng.szkingdom.android.phone/files/panelConfigFolder/otherpage_temp.json
String childDirPath = "";
String[] path = dirFilePath.split("/");
for(int i = 0; i < path.length-1;i++){
if(path[i].contains("."))
continue;
childDirPath += "/" + path[i];
File file = new File(childDirPath);
if(!file.exists()) {//考虑已经存在同样名字的文件或者目录,
Logger.d("tag", "DownloadConfigFileThread mkdir newPath:"+file.getPath());
file.mkdir();
file.setExecutable(true, false);
file.setReadable(true, false);
file.setWritable(true, false);
}
}
FileOutputStream fos = new FileOutputStream(configFile); // 输出到文件 /data/data/dongzheng.szkingdom.android.phone/files/panelConfigFolder/otherpage_temp.json
// 缓存
byte buf[] = new byte[1024];
int count = 0;
// 写入到文件中
do
{
int numread = is.read(buf);
count += numread;
// 计算进度条位置
int progress = (int) (((float) count / length) * 100);
float tempSpace = count / 1024.0f / 1024.0f;
String downloadSpace = "";
try{
downloadSpace = String.format("%.3f",tempSpace)+"M";// > 1.0f ? (tempSpace+"M") : (count / 1024.0f+"KB");
}catch(Exception e){
}
if (numread <= 0)
{
//下载完成
mHandler.removeMessages(0);
Message msg = Message.obtain();
msg.what = 0;
mHandler.sendMessage(msg);
break;
}
// 写入文件
fos.write(buf, 0, numread);
} while (true);// 点击取消就停止下载.
fos.close();
is.close();
}catch(Exception e){
mHandler.removeMessages(1);
mHandler.sendEmptyMessage(1);
//e.printStackTrace();
}
}
}

公司--下载svg图片的更多相关文章

  1. Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片

    Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在edge ...

  2. svg图片在vue脚手架vue-cli怎么使用

    第一种 使用vue2-svg-icon npm install vue2-svg-icon --save-dev` 下载之后在mian.js引入 名字可以随便起,这里我起icon 引入svg资源 这时 ...

  3. 使用在线编辑 svg 软件修改 svg 图片

    网站需要使用图标字体,但设计师给的图标大小有问题,故使用下面说陈述方法简单修改了一下.使用到的在线编辑软件地址为:https://editor.method.ac/ 问题: 注:至于如何使用图标字体( ...

  4. C#/VB.NET 将SVG图片添加到PDF、转换为PDF

    以下内容介绍在C# 程序中如何将SVG图片添加到PDF文档.以及如何将SVG图片转换为PDF文档. 一.环境准备 先下载PDF类库工具,Spire.PDF for .NET hotfix 6.5.6及 ...

  5. C#获取网页的HTML码、下载网站图片、获取IP地址

    1.根据URL请求获取页面HTML代码 /// <summary> /// 获取网页的HTML码 /// </summary> /// <param name=" ...

  6. 批量下载网站图片的Python实用小工具

    定位 本文适合于熟悉Python编程且对互联网高清图片饶有兴趣的筒鞋.读完本文后,将学会如何使用Python库批量并发地抓取网页和下载图片资源.只要懂得如何安装Python库以及运行Python程序, ...

  7. [记录][python]python爬虫,下载某图片网站的所有图集

    随笔仅用于学习交流,转载时请注明出处,http://www.cnblogs.com/CaDevil/p/5958770.html 该随笔是记录我的第一个python程序,一个爬去指定图片站点的所有图集 ...

  8. Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端

    Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...

  9. php 下载远程图片 的几种方法(转)

    1.获取远程文件大小及信息的函数 function getFileSize($url){          $url = parse_url($url);          if($fp = @fso ...

随机推荐

  1. CSS初步理解

    近期在学习牛腩的时候遇到了网页的制作.挺新奇的.其中涉及到了有关CSS的知识,于是乎自己也就花费两个小时的时间.找了本浅显易懂的书来看了一遍,从宏观上来了解CSS的相关内容.有关CSS的基础知识详见下 ...

  2. Hibernate Tools-代码生成

    建立好数据库后,点击一个键,代码就生成了,这实在是份十分满意的事情.前面有介绍Hibernate Tools就能够生成代码,那么我们怎么利用它来生成代码呢. 以下就把具体步骤贴出来,相同,有图有真相. ...

  3. c11---位运算相关

    // // main.c // 03-原码反码补码 #include <stdio.h> int main(int argc, const char * argv[]) { // int占 ...

  4. UESTC--1263--The Desire of Asuna(贪心)

    The Desire of Asuna Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu Su ...

  5. poj--3678--Katu Puzzle(2-sat 建模)

    Katu Puzzle Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Submit S ...

  6. c++面向对象程序设计 谭浩强 第二章答案

    类体内定义成员函数 #include <iostream> using namespace std; class Time { public: void set_time(); void ...

  7. Core篇——初探Core的认证,授权机制

    目录 1.Cookie-based认证的实现 2.Jwt Token 的认证与授权 3.Identity Authentication + EF 的认证 Cookie-based认证的实现 cooki ...

  8. [转自百度贴吧-本人亲测有效]Adobe XD 打开立即闪退问题修复

    出现闪退的原因还是因为缺少C++组件, 下载 DirectXRepairV3.7软件 原文: https://tieba.baidu.com/p/5961511474 软件下载: http://xia ...

  9. thinkphp5-----模板中函数的使用

    1.在模板中使用php函数 在thinkphp的html中,我们经常会遇到一些变量难以直接从php控制端直接处理,这些变量只有在模板中循环输出的时候处理比较合适,这个时候,我们就要在模板中使用函数 1 ...

  10. ZBrush中移动笔刷介绍

    移动笔刷是ZBrush®笔刷中举足轻重的一项,利用移动笔刷可以实现移动顶点的功能,还能改变模型的某一个点和某一位置.本文内容向大家介绍ZBrush®中移动笔刷以便大家熟悉它的用法和特性. 移动笔刷 可 ...