Android利用SVG框架设置图片

转http://blog.csdn.net/zimo2013/article/details/49824253


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 目录:

[html]  view plain  copy
  1. <?xml version="1.0" standalone="no"?>  
  2. <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"   
  3. "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">  
  4.   
  5. <svg width="100%" height="100%" version="1.1"  
  6. xmlns="http://www.w3.org/2000/svg">  
  7. <path d="M250 150 L150 350 L350 350 Z" />  
  8. </svg>  

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


3.图片生成SVG格式

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




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


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


[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>  
  2. <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"  
  3.               "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">  
  4.   
  5. <svg xmlns="http://www.w3.org/2000/svg"  
  6.      width="1.77778in" height="1.77778in"  
  7.      viewBox="0 0 128 128">  
  8.   <path id="选区"  
  9.         fill="none" stroke="black" stroke-width="1"  
  10.         d="M 108.54,26.04  
  11.            C 131.59,52.94 125.04,97.93 93.00,114.74  
  12.              79.15,122.00 75.25,122.17 60.00,122.00  
  13.              22.32,121.56 -2.52,80.38 8.75,46.00  
  14.              16.01,23.85 33.60,10.58 56.00,6.44  
  15.              75.35,3.96 95.68,11.04 108.54,26.04 Z  
  16.            M 56.97,45.15  
  17.            C 52.64,43.32 36.54,44.00 31.00,44.00  
  18.              31.00,44.00 31.00,76.00 31.00,76.00  
  19.              31.02,78.13 30.74,81.51 32.60,82.98  
  20.              34.49,84.47 42.35,84.00 45.00,84.00  
  21.              49.96,83.99 56.82,83.94 60.73,80.43  
  22.              66.36,75.36 66.06,66.13 56.97,63.00  
  23.              56.97,63.00 56.97,61.00 56.97,61.00  
  24.              65.30,56.20 63.38,47.91 56.97,45.15 Z  
  25.            M 75.00,47.00  
  26.            C 75.00,47.00 75.00,49.00 75.00,49.00  
  27.              75.00,49.00 90.00,49.00 90.00,49.00  
  28.              90.00,49.00 90.00,47.00 90.00,47.00  
  29.              90.00,47.00 75.00,47.00 75.00,47.00 Z  
  30.            M 53.69,50.02  
  31.            C 56.68,52.02 56.68,57.83 53.69,59.83  
  32.              51.13,61.53 42.36,61.00 39.00,61.00  
  33.              39.00,61.00 39.00,49.00 39.00,49.00  
  34.              42.16,49.00 51.36,48.47 53.69,50.02 Z  
  35.            M 90.00,71.00  
  36.            C 101.61,70.78 95.70,60.78 91.70,57.84  
  37.              81.22,50.14 65.06,59.66 68.95,74.00  
  38.              72.11,85.62 91.42,89.31 96.00,75.95  
  39.              89.20,76.54 82.26,84.08 76.93,75.95  
  40.              76.03,74.51 75.51,72.57 75.00,71.00  
  41.              75.00,71.00 90.00,71.00 90.00,71.00 Z  
  42.            M 91.00,67.00  
  43.            C 91.00,67.00 75.00,67.00 75.00,67.00  
  44.              77.80,56.34 89.44,55.99 91.00,67.00 Z  
  45.            M 48.00,65.14  
  46.            C 49.46,65.02 51.56,65.02 52.95,65.14  
  47.              57.94,66.90 59.11,73.01 55.57,76.57  
  48.              52.93,79.23 48.51,79.13 45.00,78.98  
  49.              42.86,78.89 40.68,78.89 39.60,76.69  
  50.              38.72,74.89 39.00,67.39 39.00,65.14  
  51.              39.00,65.14 48.00,65.14 48.00,65.14 Z" />  
  52. </svg>  
如果找不到路径对话框,可根据下图找到



4.实现方式

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

[html]  view plain  copy
  1. <com.github.jorgecastillo.FillableLoader  
  2.   android:id="@+id/fillableLoader"  
  3.   android:layout_width="200dp"  
  4.   android:layout_height="100dp"  
  5.   app:fl_originalWidth="@integer/original_svg_width"  
  6.   app:fl_originalHeight="@integer/original_svg_height"  
  7.   app:fl_strokeColor="@color/stroke_color"  
  8.   app:fl_fillColor="@color/fill_color"  
  9.   app:fl_strokeWidth="@dimen/stroke_width"  
  10.   app:fl_strokeDrawingDuration="@integer/stroke_drawing_duration"  
  11.   app:fl_fillDuration="@integer/fill_duration"  
  12.   app:fl_clippingTransform="waves"  
  13.   />  
[java]  view plain  copy
  1. @Override  
  2. protected void onCreate(Bundle savedInstanceState) {  
  3.     super.onCreate(savedInstanceState);  
  4.     setContentView(R.layout.activity_main);  
  5.     String svg = "M 108.54,26.04\n" +  
  6.             "C 131.59,52.94 125.04,97.93 93.00,114.74\n" +  
  7.             " 79.15,122.00 75.25,122.17 60.00,122.00\n" +  
  8.             " 22.32,121.56 -2.52,80.38 8.75,46.00\n" +  
  9.             " 16.01,23.85 33.60,10.58 56.00,6.44\n" +  
  10.             " 75.35,3.96 95.68,11.04 108.54,26.04 Z\n" +  
  11.             "M 56.97,45.15\n" +  
  12.             "C 52.64,43.32 36.54,44.00 31.00,44.00\n" +  
  13.             " 31.00,44.00 31.00,76.00 31.00,76.00\n" +  
  14.             " 31.02,78.13 30.74,81.51 32.60,82.98\n" +  
  15.             " 34.49,84.47 42.35,84.00 45.00,84.00\n" +  
  16.             " 49.96,83.99 56.82,83.94 60.73,80.43\n" +  
  17.             " 66.36,75.36 66.06,66.13 56.97,63.00\n" +  
  18.             " 56.97,63.00 56.97,61.00 56.97,61.00\n" +  
  19.             " 65.30,56.20 63.38,47.91 56.97,45.15 Z\n" +  
  20.             "M 75.00,47.00\n" +  
  21.             "C 75.00,47.00 75.00,49.00 75.00,49.00\n" +  
  22.             " 75.00,49.00 90.00,49.00 90.00,49.00\n" +  
  23.             " 90.00,49.00 90.00,47.00 90.00,47.00\n" +  
  24.             " 90.00,47.00 75.00,47.00 75.00,47.00 Z\n" +  
  25.             "M 53.69,50.02\n" +  
  26.             "C 56.68,52.02 56.68,57.83 53.69,59.83\n" +  
  27.             " 51.13,61.53 42.36,61.00 39.00,61.00\n" +  
  28.             " 39.00,61.00 39.00,49.00 39.00,49.00\n" +  
  29.             " 42.16,49.00 51.36,48.47 53.69,50.02 Z\n" +  
  30.             "M 90.00,71.00\n" +  
  31.             "C 101.61,70.78 95.70,60.78 91.70,57.84\n" +  
  32.             " 81.22,50.14 65.06,59.66 68.95,74.00\n" +  
  33.             " 72.11,85.62 91.42,89.31 96.00,75.95\n" +  
  34.             " 89.20,76.54 82.26,84.08 76.93,75.95\n" +  
  35.             " 76.03,74.51 75.51,72.57 75.00,71.00\n" +  
  36.             " 75.00,71.00 90.00,71.00 90.00,71.00 Z\n" +  
  37.             "M 91.00,67.00\n" +  
  38.             "C 91.00,67.00 75.00,67.00 75.00,67.00\n" +  
  39.             " 77.80,56.34 89.44,55.99 91.00,67.00 Z\n" +  
  40.             "M 48.00,65.14\n" +  
  41.             "C 49.46,65.02 51.56,65.02 52.95,65.14\n" +  
  42.             " 57.94,66.90 59.11,73.01 55.57,76.57\n" +  
  43.             " 52.93,79.23 48.51,79.13 45.00,78.98\n" +  
  44.             " 42.86,78.89 40.68,78.89 39.60,76.69\n" +  
  45.             " 38.72,74.89 39.00,67.39 39.00,65.14\n" +  
  46.             " 39.00,65.14 48.00,65.14 48.00,65.14 Z";  
  47.     fillableLoader = (FillableLoader) findViewById(R.id.fillableLoader);  
  48.   
  49.     //将生成svg作为字符串传参进来  
  50.     fillableLoader.setSvgPath(svg);  
  51. }  
[java]  view plain  copy
  1. findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View view) {  
  4.         //开启  
  5.         fillableLoader.start();  
  6.     }  
  7. });  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值