前言

来继续学习SVG,要想深入了解还是要多动手进行实战。关于svg基础可以去看一下我的上一篇文章《SVG前戏—让你的View多姿多彩》,今天就用SVG打造一个精美的UI效果。

正文

先上效果图:

开启线程池,进行绘制

选择省份

我们都知道SVG的文件是纯粹的 XML。如:

 

[图片上传中...(12345.gif-60d52c-1533723732988-0)]

123.gif

看到这里,我们都明白了。原来里面类似以path的数据进行组装的。只需要进行解析xml就可以了。

解析关键代码:

 

关键点:还是在于UI绘制的时候,把解析到的数据进行分片绘制。这里用是path和region互相结合的一个算法。另外刚开始解析数据的时候,我开起了线程池进行绘制刷新的。详细可参考demo!

<path/>路径的路径描述指令含义表:
  • M = moveto 相当于 android Path 里的moveTo(),用于移动起始点
  • L = lineto 相当于 android Path 里的lineTo(),用于画线
  • H = horizontal lineto 用于画水平线
  • V = vertical lineto 用于画竖直线
  • C = curveto 相当于cubicTo(),三次贝塞尔曲线
  • S = smooth curveto 同样三次贝塞尔曲线,更平滑
  • Q = quadratic Belzier curve quadTo(),二次贝塞尔曲线
  • T = smooth quadratic Belzier curveto 同样二次贝塞尔曲线,更平滑
  • A = elliptical Arc 相当于arcTo(),用于画弧
  • Z = closepath 相当于closeTo(),关闭path

大写代表绝对位置, 小写代表相对位置。

SVG里面还有各种标签:

包括line直线,circle圆,rect矩形,eliipse椭圆,polygon多边形,等等
这些只要我们又一个SVG文件,都可以将其转换成java代码

 

 

地图项目地址:

https://github.com/androidstarjack/MySvgYuyahaoDrawChinaMap

备注:该demo仅为学习Android提供思路用,我很爱国的!

该demo仅为学习Android提供思路用,我很爱国的

阅读更多

终于,我还是下决心学Java后台了

谈一下Application和Context

金9银10的面试黄金季节,分享几个重要的面试题

谈一下Application和Context

总结

作为一个程序员,我们当然不能手动去做这个工作,那就涉及两个问题,一个是SVG的解析,一个是解析后的绘制。虽然有人已经完成了这个工作,但我觉得还是自己动手敲一遍为好!任何时候不要太过于依赖第三方的。

相信自己,没有做不到的,只有想不到的

欢迎关注我公众号:终端研发部,在这里获得的不仅仅是技术!

高级UI特效—用SVG码造一个精美的中国地图的更多相关文章

  1. 一个让echarts中国地图包含省市轮廓的技巧

    背景知识及应用简介 本文主要介绍一个使用ECharts地图组件的取巧方法,该技巧源于实际需求中遇到的问题,一般没有该需求的话这个技巧也是用不到的.有前端基础和以及对ECharts有了解的人基本可以读懂 ...

  2. web前端的十种jquery特效及源码下载

    1.纯CSS3实现自定义Tooltip边框 涂鸦风格 这是一款用纯CSS3打造的自定义Tooltip边框的应用,之前我们讨论过如何用CSS3来实现不同样式的Tooltip,今天的这款Tooltip却可 ...

  3. 高级UI晋升之触摸事件分发机制(一)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 0. 前言 鉴于安卓分发机制较为复杂,故分为多个层次进行讲解,分别为基础篇.实践 ...

  4. 【记录】如何造一个vite插件(1)

    在看文章前,先做个定位,这不是一篇纯粹的技术性文章,可以把它理解成一个叙述文章,记录我开发插件的过程. 开始前简单的吹个牛 vue2 也写了很多年了,多人合作始终避不开用到别人的组件.关键是有些组件没 ...

  5. storm源码之一个class解决nimbus单点问题【转】

    本文导读: storm nimbus 单节点问题概述 storm与解决nimbus单点相关的概念 nimbus目前无法做到多节点的原因 解决nimbus单点问题的关键 业界对nimbus单点问题的努力 ...

  6. firefox 扩展开发笔记(三):高级ui交互编程

    firefox 扩展开发笔记(三):高级ui交互编程 前言 前两篇链接 1:firefox 扩展开发笔记(一):jpm 使用实践以及调试 2:firefox 扩展开发笔记(二):进阶开发之移动设备模拟 ...

  7. Qt Style Sheets制作UI特效

    使用Qt Style Sheets制作UI特效  博客出处:http://developer.nokia.com/community/wiki/%E4%BD%BF%E7%94%A8Qt_Style_S ...

  8. Android 高级UI设计笔记07:RecyclerView 的详解

    1. 使用RecyclerView       在 Android 应用程序中列表是一个非常重要的控件,适用场合非常多,如新闻列表.应用列表.消息列表等等,但是从Android 一出生到现在并没有非常 ...

  9. Kendo UI开发教程(8): Kendo UI 特效概述

    Kendo UI Fx 提供了一个丰富,可扩展,性能经过优化的工具集合用来完成HTML元素的过渡显示.每种特效近可能的使用CSS Transition ,对于一些老版本浏览器使用修改属性的方法作为补充 ...

随机推荐

  1. Learn jQuery in y seconds

    [兼容IE8以下没办法][虽不是Modern Web(不建议直接操作DOM)但也是一大利器] 个人推荐书[CSS 网站实录][JavaScript Dom 编程艺术][刚开始学不能太纠结机制机理原理因 ...

  2. arcgis中的geodatabase模型

    简介Geodatabase是ESRI公司定义的一个为ArcGIS所用的数据框架,该框架定义了ArcGIS中用到的所有的数据类型.不管ArcGIS的数据存储到何处.以什么格式存储,都脱离不了该框架.也可 ...

  3. 写自适应的textarea文本域

    <div contenteditable="true"> </div> 我们都知道默认的textarea无法自适应,一般情况下都是内容过多里面通过滚动条来滚 ...

  4. 【译】第一篇 SQL Server安全概述

    本篇文章是SQL Server安全系列的第一篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...

  5. WSGI、uwsgi和uWSGI

    一.WSGI WSGI ( Web Server Gateway Interface )是一个网络服务器和网络应用的通用接口的规范或者用于Python框架. 由于python开发人员在网络框架的选择限 ...

  6. invalidate和requestLayout

    Invalidate:To farce a view to draw,call invalidate().——摘自View类源码从上面这句话看出,invalidate方法会执行draw过程,重绘Vie ...

  7. POJ 3253 Fence Repair (贪心)

    题意:将一块木板切成N块,长度分别为:a1,a2,……an,每次切割木板的开销为当前木板的长度.求出按照要求将木板切割完毕后的最小开销. 思路:比较奇特的贪心 每次切割都会将当前木板一分为二,可以按切 ...

  8. awk基本用法

    1  简介 awk实质是一种编程语言,基本作用在于查找和替换. 2  基本用法 有文本名称为:awk.txt 内容为: john.wang male 30 021-111111 lucy.yang f ...

  9. Mysql事务与JDBC事务管理

    一.事务概述 1.什么是事务 一件事情有n个组成单元 要不这n个组成单元同时成功 要不n个单元就同时失败 就是将n个组成单元放到一个事务中 2.mysql的事务 默认的事务:一条sql语句就是一个事务 ...

  10. C# 判断网络是否连接

    bool isconn = true; PingReply pr; Ping ping = new Ping(); pr = ping.Send("lightyiyi.cn"); ...