Android_SVG概述及生成使用SVG详解

1.效果图

2.SVG-Path路径

下面的命令可用于路径数据:
M = moveto
L = lineto
H = horizontal lineto
V = vertical lineto
C = curveto
S = smooth curveto
Q = quadratic Belzier curve
T = smooth quadratic Belzier curveto
A = elliptical Arc
Z = closepath
注释:以上所有命令均允许小写字母。大写表示绝对定位,小写表示相对定位。

请把下面的代码拷贝到记事本,然后把文件保存为 "path1.svg"。把此文件放入您的 web 目录:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<path d="M250 150 L150 350 L350 350 Z" />
</svg>

上面的例子定义了一条路径,它开始于位置 250 150,到达位置 150 350,然后从那里开始到 350 350,最后在 250 150 关闭路径。

3.图片生成SVG格式

这里推荐使用GIMP工具生成,具体步骤如下:

根据以上找到Path路径,将其保存起来

再到路径对话框中,将path导出

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
              "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">

<svg xmlns="http://www.w3.org/2000/svg"
     width="1.77778in" height="1.77778in"
     viewBox="0 0 128 128">
  <path id="选区"
        fill="none" stroke="black" stroke-width="1"
        d="M 108.54,26.04
           C 131.59,52.94 125.04,97.93 93.00,114.74
             79.15,122.00 75.25,122.17 60.00,122.00
             22.32,121.56 -2.52,80.38 8.75,46.00
             16.01,23.85 33.60,10.58 56.00,6.44
             75.35,3.96 95.68,11.04 108.54,26.04 Z
           M 56.97,45.15
           C 52.64,43.32 36.54,44.00 31.00,44.00
             31.00,44.00 31.00,76.00 31.00,76.00
             31.02,78.13 30.74,81.51 32.60,82.98
             34.49,84.47 42.35,84.00 45.00,84.00
             49.96,83.99 56.82,83.94 60.73,80.43
             66.36,75.36 66.06,66.13 56.97,63.00
             56.97,63.00 56.97,61.00 56.97,61.00
             65.30,56.20 63.38,47.91 56.97,45.15 Z
           M 75.00,47.00
           C 75.00,47.00 75.00,49.00 75.00,49.00
             75.00,49.00 90.00,49.00 90.00,49.00
             90.00,49.00 90.00,47.00 90.00,47.00
             90.00,47.00 75.00,47.00 75.00,47.00 Z
           M 53.69,50.02
           C 56.68,52.02 56.68,57.83 53.69,59.83
             51.13,61.53 42.36,61.00 39.00,61.00
             39.00,61.00 39.00,49.00 39.00,49.00
             42.16,49.00 51.36,48.47 53.69,50.02 Z
           M 90.00,71.00
           C 101.61,70.78 95.70,60.78 91.70,57.84
             81.22,50.14 65.06,59.66 68.95,74.00
             72.11,85.62 91.42,89.31 96.00,75.95
             89.20,76.54 82.26,84.08 76.93,75.95
             76.03,74.51 75.51,72.57 75.00,71.00
             75.00,71.00 90.00,71.00 90.00,71.00 Z
           M 91.00,67.00
           C 91.00,67.00 75.00,67.00 75.00,67.00
             77.80,56.34 89.44,55.99 91.00,67.00 Z
           M 48.00,65.14
           C 49.46,65.02 51.56,65.02 52.95,65.14
             57.94,66.90 59.11,73.01 55.57,76.57
             52.93,79.23 48.51,79.13 45.00,78.98
             42.86,78.89 40.68,78.89 39.60,76.69
             38.72,74.89 39.00,67.39 39.00,65.14
             39.00,65.14 48.00,65.14 48.00,65.14 Z" />
</svg>

如果找不到路径对话框,可根据下图找到

4.实现方式

这里使用AndroidFillableLoaders框架加载svg,更多可以查看作者文章http://jorgecastillo.xyz/2015/08/16/android-fillable-loaders/

<com.github.jorgecastillo.FillableLoader
  android:id="@+id/fillableLoader"
  android:layout_width="200dp"
  android:layout_height="100dp"
  app:fl_originalWidth="@integer/original_svg_width"
  app:fl_originalHeight="@integer/original_svg_height"
  app:fl_strokeColor="@color/stroke_color"
  app:fl_fillColor="@color/fill_color"
  app:fl_strokeWidth="@dimen/stroke_width"
  app:fl_strokeDrawingDuration="@integer/stroke_drawing_duration"
  app:fl_fillDuration="@integer/fill_duration"
  app:fl_clippingTransform="waves"
  />
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    String svg = "M 108.54,26.04\n" +
            "C 131.59,52.94 125.04,97.93 93.00,114.74\n" +
            " 79.15,122.00 75.25,122.17 60.00,122.00\n" +
            " 22.32,121.56 -2.52,80.38 8.75,46.00\n" +
            " 16.01,23.85 33.60,10.58 56.00,6.44\n" +
            " 75.35,3.96 95.68,11.04 108.54,26.04 Z\n" +
            "M 56.97,45.15\n" +
            "C 52.64,43.32 36.54,44.00 31.00,44.00\n" +
            " 31.00,44.00 31.00,76.00 31.00,76.00\n" +
            " 31.02,78.13 30.74,81.51 32.60,82.98\n" +
            " 34.49,84.47 42.35,84.00 45.00,84.00\n" +
            " 49.96,83.99 56.82,83.94 60.73,80.43\n" +
            " 66.36,75.36 66.06,66.13 56.97,63.00\n" +
            " 56.97,63.00 56.97,61.00 56.97,61.00\n" +
            " 65.30,56.20 63.38,47.91 56.97,45.15 Z\n" +
            "M 75.00,47.00\n" +
            "C 75.00,47.00 75.00,49.00 75.00,49.00\n" +
            " 75.00,49.00 90.00,49.00 90.00,49.00\n" +
            " 90.00,49.00 90.00,47.00 90.00,47.00\n" +
            " 90.00,47.00 75.00,47.00 75.00,47.00 Z\n" +
            "M 53.69,50.02\n" +
            "C 56.68,52.02 56.68,57.83 53.69,59.83\n" +
            " 51.13,61.53 42.36,61.00 39.00,61.00\n" +
            " 39.00,61.00 39.00,49.00 39.00,49.00\n" +
            " 42.16,49.00 51.36,48.47 53.69,50.02 Z\n" +
            "M 90.00,71.00\n" +
            "C 101.61,70.78 95.70,60.78 91.70,57.84\n" +
            " 81.22,50.14 65.06,59.66 68.95,74.00\n" +
            " 72.11,85.62 91.42,89.31 96.00,75.95\n" +
            " 89.20,76.54 82.26,84.08 76.93,75.95\n" +
            " 76.03,74.51 75.51,72.57 75.00,71.00\n" +
            " 75.00,71.00 90.00,71.00 90.00,71.00 Z\n" +
            "M 91.00,67.00\n" +
            "C 91.00,67.00 75.00,67.00 75.00,67.00\n" +
            " 77.80,56.34 89.44,55.99 91.00,67.00 Z\n" +
            "M 48.00,65.14\n" +
            "C 49.46,65.02 51.56,65.02 52.95,65.14\n" +
            " 57.94,66.90 59.11,73.01 55.57,76.57\n" +
            " 52.93,79.23 48.51,79.13 45.00,78.98\n" +
            " 42.86,78.89 40.68,78.89 39.60,76.69\n" +
            " 38.72,74.89 39.00,67.39 39.00,65.14\n" +
            " 39.00,65.14 48.00,65.14 48.00,65.14 Z";
    fillableLoader = (FillableLoader) findViewById(R.id.fillableLoader);

    //将生成svg作为字符串传参进来
    fillableLoader.setSvgPath(svg);
}
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //开启
        fillableLoader.start();
    }
});

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 08:37:51

Android_SVG概述及生成使用SVG详解的相关文章

ini格式数据生成与解析详解

ini格式数据生成与解析详解 1.ini格式数据长啥样? 2.ini格式数据简介 INI文件的命名来源,是取自英文"初始(Initial)"的首字缩写,正与它的用途--初始化程序相应. 有时候,INI文件也会以不同的扩展名,如".cfg".".conf"(在Linux系统中也常用到).或是".txt"代替(从辨识度的角度,不建议使用). 3.ini格式数据适用场景 INI文件是一个无固定标准格式的配置文件.它以简单的文字与简单

SVG生成字体图标详解

正向代理/反向代理理解、Nginx概述、安装及配置详解

一.Nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现.这里主要通过三个方面简单介绍nginx:反向代理.负载均衡.nginx特点 1.反向代理 关于代理:说到代理,首先我们要明确一个概念,所谓代理就是一个代表.一个渠道: 此时就涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问

Jquery EasyUI datagrid后台数据表格生成及分页详解

由于项目原因,网站后台需要对用户信息进行各种操作,有时还需要进行批量操作,所以首先需要将用户信息展示出来,查了不少资料.发现Jquery EasyUI确实是一个不错的选择,功能强大,文档也比较全面,而且容易上手.今天就把自己在项目中用到的功能做了一个总结.生成数据表格如下所示: 接下来上代码 界面html及js代码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"/>

lib 和 dll 的区别、生成以及使用详解

首先介绍一下静态库(静态链接库).动态库(动态链接库)的概念,首先两者都是代码共享的方式. 静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝:缺点就是被多次使用就会有多份冗余拷贝.即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了.在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件 动态库:动态链接库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件.动

lib 和 dll 的区别、生成以及使用详解(转)

原文章地址:https://www.cnblogs.com/TenosDoIt/p/3203137.html#c 首先介绍一下静态库(静态链接库).动态库(动态链接库)的概念,首先两者都是代码共享的方式. 静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件(链接过程就已经复制好了)中,这种库称为静态库,其特点是exe中包含了库代码的一份完整拷贝:缺点就是被多次使用就会有多份冗余拷贝.即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了.在vs中新建生成静态库的

mybatis-generator自动生成代码插件详解

一.mybatis-generator是一款在使用mybatis框架时,自动生成model,dao和mapper的工具,减少了业务开发人员的手动编码时间,提高工作效率主要有以下三个配置文档: 1.本人使用的是maven构建,首先在pom.xml文件添加mybatis-generator依赖包以及插件,配置如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://ma

HTML5地理位置概述和地理位置对象的详解

一.地理位置 经度  :   南北极的连接线 纬度  :   东西连接的线 二.位置信息从何而来 IP地址 GPS全球定位系统 Wi-Fi无线网络 基站 三.地理位置对象(navigator.geolocation) – 单次定位请求  :getCurrentPosition(请求成功,请求失败,数据收集方式) –请求成功函数 »经度 :  coords.longitude »纬度 :  coords.latitude »准确度 :  coords.accuracy »海拔 :  coords.

Spark Streaming 源码详解

原地址 本系列内容适用范围: * 2015.12.05 update, Spark 1.6 全系列 √ (1.6.0-preview,尚未正式发布) * 2015.11.09 update, Spark 1.5 全系列 √ (1.5.0, 1.5.1, 1.5.2) * 2015.07.15 update, Spark 1.4 全系列 √ (1.4.0, 1.4.1) * 2015.04.17 update, Spark 1.3 全系列 √ (1.3.0, 1.3.1) 概述 0.1 Spark