zoukankan      html  css  js  c++  java
  • 公司--下载svg图片

    加载本地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();
            }
        }
    }
  • 相关阅读:
    java布尔运算中的短路运算
    java基本数据类型和引用数据类型
    人工智能,自然界四大奥秘之一
    关于PHP导出数据超时的优化
    IDEA 生成返回值对象快捷键(GoLand,pycharm)
    Windows系统Git安装教程(详解Git安装过程)
    电脑锁屏壁纸, 时钟屏保
    常用分布函数的方差和期望机及其性质
    Windows LTSC、LTSB、Server 安装 Windows Store 应用商店
    JavaWeb中编码问题的解决办法(在客户端和服务器之间传入或响应数据后中文乱码; cookie的乱码问题) || Cookie和Session
  • 原文地址:https://www.cnblogs.com/yaowen/p/5660310.html
Copyright © 2011-2022 走看看