加载本地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. 朴素的UNIX之-调度器细节

    0.多进程调度的本质 我们都知道UNIX上有一个著名的nice调用.何谓nice,当然是"好"了.常规的想法是nice值越大越好,实际上,nice值越好,自己的优先级越低.那么为何 ...

  2. Docker运行程序报错 WARNING: IPv4 forwarding is disabled. Networking will not work

    WARNING: IPv4 forwarding is disabled. Networking will not work.   第一步:vi /usr/lib/sysctl.d/00-system ...

  3. caffe.bin caffe的框架

    最近打算看一看caffe实现的源码,因为发现好多工作都是基于改动网络来实现自己的的目的.比如变更目标函数以及网络结构,以实现图片风格转化或者达到更好的效果. 深度学习框架 https://mp.wei ...

  4. SVN——Jenkins自动发布

    最近公司项目处于开发阶段,很多功能开发完后就需要发布到测试环境等待测试去验收,这个时候如果手动更新网站的话,是很费时费力的. 于是乎,我们做成了自动发布,这样我们只管提交代码到SVN就行了,发布由软件 ...

  5. Java NIO(二)缓冲区

    概念 缓冲区:一个用于特定基本数据类型的容器,由java.nio包定义的所有缓冲区都是Buffer抽象类的子类.其作用于与NIO的通道进行交互,数据从通道读入缓冲区,数据从缓冲区写入通道 Buffer ...

  6. ScrollView和ListView滑动冲突问题

    1.在ScrollView里面嵌套ListView时,ListView的滑动事件无法响应. 先看下事件分发的过程: 由父View层的  onInterceptTouchEvent    到中间层的on ...

  7. [ RESTful ] [ API ] 有用的資訊

    1. 淺談 REST 軟體架構風格 (Part.I) - 從了解 REST 到設計 RESTful https://blog.toright.com/posts/725/representationa ...

  8. hdu 5372 Segment Game 【 树状数组 】

    给出一些操作, 0是将第i次增加的线段放在b位置,第i次放的线段的长度为i 1是将第b次增加操作放的线段删除 每次增加操作完之后,询问这条线段上面的完整的线段的条数 每次询问统计比这条线段左端点大的线 ...

  9. Unity 动画系统(Mecanim) 术语及翻译 表格

    原文 翻译 Animation Clip 视频片段 Avatar 阿凡达 Retargeting 重定向 Rigging 绑定 skinning 蒙皮 Animator Component 动画组件 ...

  10. Codeforces Round #468 (Div. 2 )D. Peculiar apple-tree_BFS

    题目简单,不多解释. Code: #include<cstdio> #include<queue> using namespace std; const int maxn = ...