svg是目前十分流行的图像文件格式了,svg严格来说应该是一种开放标准的矢量图形语言,使用svg格式我们可以直接用代码来描绘图像,可以用任何文字处理工具打开svg图像,通过改变部分代码来使图像具有交互功能,并可以随时插入到HTML中通过浏览器(如火狐浏览器)来观看。使用svg格式可让你设计激动人心的、高分辨率的Web图形页面。

svg格式具备目前网络流行的jpg和png等格式无法具备的优势:可以任意放大图形显示,但绝不会以牺牲图像质量为代价;可在svg图像中保留可编辑和可搜寻的状态;平均来讲,svg文件比其它格式的图像文件要小很多,因而下载也很快。

我们先来看几张Android上使用SVG的效果图:

从上面的图片看到,如果我们自己来实现这样的特效,非常的麻烦,不过接下来给大家介绍一个开源控件,就可以配合SVG实现这些效果。

首先我们来了解SVG文件的格式,举个例子:

上面的代码很复杂,如果说它们是代码的话,但是我们可以注意到,这种书写方式,有点类似于html,都是使用标签

使用最多的标签是path,也就是路径

有的人也会想到,要实现照片上的动态效果,我们可以使用Android自带的绘图类和函数,复杂的曲线路径,我们可以使用path这个类来制定

那会不会SVG里面的path,其实也是这样,那么我们就可以将SVG中的path,对应到android,然后绘制出来就好了。

SVG里面还有各种标签:

包括line直线,circle圆,rect矩形,eliipse椭圆,polygon多边形,等等

这些只要我们又一个SVG文件,都可以将其转换成java代码

作为一个程序员,我们当然不能手动去做这个工作,那就涉及两个问题,一个是SVG的解析,一个是解析后的绘制

幸运的是,已经有人完成了这个工作,并且在Github上开源 https://github.com/geftimov/android-pathview

这篇文章将作为一个简单的例子,来使用上面的开源控件

为了解析SVG,我们需要将一个androidsvg.jar包含进我们的lib

下面我们来看这个控件的简单使用,作为一个自定义控件,我们只需要在布局文件里面添加

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:background="#ff0000"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

xmlns:app="http://schemas.android.com/apk/res-auto"

android:id="@+id/pathView"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:pathColor="@android :color/white"

app:svg="@raw/ironman_white"

app:pathWidth="5"/>

其实app:svg指定了一个SVG文件,我们可以把这个文章放在raw目录下面

然后来看Activity里面:

public class MainActivity extends FragmentActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

final PathView pathView = (PathView) findViewById(R.id.pathView);

//        final Path path = makeConvexArrow(50, 100);

//        pathView.setPath(path);

pathView.setFillAfter(true);

pathView.useNaturalColors();

pathView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

pathView.getPathAnimator().

delay(100).

duration(1500).

interpolator(new AccelerateDecelerateInterpolator()).

start();

}

});

}

private Path makeConvexArrow(float length, float height) {

final Path path = new Path();

path.moveTo(0.0f, 0.0f);

path.lineTo(length / 4f, 0.0f);

path.lineTo(length, height / 2.0f);

path.lineTo(length / 4f, height);

path.lineTo(0.0f, height);

path.lineTo(length * 3f / 4f, height / 2f);

path.lineTo(0.0f, 0.0f);

path.close();

return path;

}

}

看到注释的部分,调用了makeConvexArraw()方法,如果我们没有在xml文件里面指定svg文件,我们也可以在代码中手动指定绘制的路径

让代码跑起来,点击屏幕,于是就实现了以下效果:

就是这么简单,至于这么制作SVG文件,大家可以找美工帮忙,使用ps和ai,可以将图片转换成SVG

源码下载地址:

------------------------------------------分割线------------------------------------------

具体下载目录在 /2015年资料/8月/20日/Android实现炫酷SVG动画效果/

android svg动画框架,Android实现炫酷SVG动画效果相关推荐

  1. android 天气动画,为app制作炫酷天气动画 – WeatherView

    WeatherView 从1.1.0版本开始这个库使用了一个不同的setter结构. WeatherView是一个为app制作一个炫酷天气动画的Android库. Setup Android Stud ...

  2. android 生成 gif动画,一分钟做出炫酷gif动画 GIF快手for android体验

    New应用是牛华网全新打造的一个Android以及iOS应用发现平台,旨在帮助用户发现和推荐更多精品的Android.iOS应用,用专业的视角为用户搜罗品质更高.质量更优的应用,以此来丰富广大用户的移 ...

  3. 如何利用 Android 自定义控件实现炫酷的动画?|CSDN 博文精选

    作者 | u012551350 本文精选自 CSDN 博客,已获作者授权 「知足常乐」,很多人不满足现状,各种折腾,往往舍本逐末,常乐才能少一分浮躁,多一分宁静.近期在笔者身上发生了许多事情,心态也发 ...

  4. 六、Android中的Animation与炫酷开场动画

    本文目录 一.属性动画和MaterialDesign动画 属性动画和MaterialDesign动画相关的内容,已经在前面写过,具体查看https://www.jianshu.com/p/15d256 ...

  5. 【Android珍藏】推荐10个炫酷的开源库

    前言 技术群里面经常有人问到一些炫酷的UI效果实现方法,有时候我都是给一个相同或者相似效果的Github链接,有同学私信给我说,怎么这些效果你都能找到?你是怎么搜索的,或者有其他什么秘方?会利用Goo ...

  6. android 炫酷进度条,Android打造炫酷进度条效果

    本文实例为大家分享了Android炫酷进度条效果的具体代码,供大家参考,具体内容如下 HorizontalProgressbarWithProgress的代码 import android.conte ...

  7. iOS动画开发之五——炫酷的粒子效果

    iOS动画开发之五--炫酷的粒子效果 在上几篇博客中,我们对UIView层的动画以及iOS的核心动画做了介绍,基本已经可以满足iOS应用项目中所有的动画需求,如果你觉得那些都还不够炫酷,亦或是你灵光一 ...

  8. html css图片展开动画,8个实用炫酷的HTML5图片动画应用

    本文作者html5tricks,转载请注明出处 近期我们发布了不少关于 1.CSS3/jQuery实现移动端滑动图片层叠效果 这是一款基于jQuery和CSS3的图片层叠插件,这和我们之前介绍的CSS ...

  9. 如何做一个炫酷的动画网站-css实现图片上下浮动效果

    目前网站制作技术已经非常成熟.所以要实现一个炫酷的动画网站还是非常容易,现在通过js和css就都能实现.直接css就能实现各种效果,下面我们来通过一个小动画看看如何用css来实现让你的网站图片上下浮动 ...

最新文章

  1. linux内核oom,linux OOM killer分析
  2. C#编程中的crc16校验
  3. python怎么样处理excel教程_python处理excel教程是什么
  4. python 列表操作-切片
  5. 第六届蓝桥杯【省赛试题 7】牌型种数 - i 逆天耗子 - CSDN 博客
  6. Vue「六」前端路由、vue-router
  7. inner join 与 left join 之间的区别
  8. Opera R3 将使用新的用户界面
  9. ansible获取服务器信息,ansible监控服务器资源使用
  10. UVa 10491 - Cows and Cars(全概率)
  11. od反汇编linux,新手学习反汇编之OD寻找功能call
  12. 北理校园网省流攻略之下载篇
  13. oracle单列转行,oracle 两种列转行的方式
  14. 2019各大互联网公司年会盘点
  15. java tif合成_JAI 多图片合成TIF格式
  16. 武汉科技大学计算机生命与科学周海,湖北双胞胎周海周洋:为了母亲,一个放弃清华,一人放弃中科院...
  17. c++ 实现雷霆战机可视化小游戏
  18. 麒麟系统开启关闭防火墙服务
  19. coffeescript语法入门
  20. 第十六届全国大学生智能车竞赛(安徽赛区)信标组蒟蒻的想法

热门文章

  1. 什么是RS485总线?
  2. 小程序高级电商前端第1周走进Web全栈工程师<二>
  3. 996M11鹅厂这些互联网行业“黑话”,你知多少?
  4. 那些令人发燥的JAVA虚引用
  5. Mybatis-Plus 新手入门,一篇足以
  6. js判断当前浏览器的环境是微信、pc、还是手机端非微信环境
  7. 计算机领域nt=p,计算机考试范题-pwerpoint操作.doc
  8. BDCN:Bi-Directional Cascade Network for Perceptual Edge Detection论文解读和代码实现
  9. 美国网站直接shopping之经验总结
  10. 关于 DRM 中 DUMB 和 PRIME 名字的由来