android svg路径动画,svg实现自定义路径动画
layout: post
title: "svg自定义路径动画"
subtitle: "svg path 动画"
date: 2016-09-26 12:00:00
author: "Guolei"
header-img: ""
header-mask: 0.3
catalog: false
tags:
- svg
svg相对于canves,svg更加适合做小图标和线条,canves做大型游戏
svg的基础教程可以在w3c上查看,本篇文章主要讲,如何绘制自定义路径,以及如何在自定义路径上实现动画。
先看效果
(忽略我丑陋的书法)
难点:
如何将自定义路径转化为Path代码
如何获取svn每个像素点的坐标
车子并不是简单的位移,车头方向和前进方向相同(切线)
原理
svg实现动画一般是通过 stroke-dasharray和stroke-dashoffset这两个属性来实现。
backgroundLayer 1
html
path {
stroke-dasharray: 3000;
stroke-dashoffset: 3000;
-webkit-animation: dash 5s linear infinite;
animation: dash 5s linear infinite;
}
css
stroke-dasharray代表虚线之间的间距大小
stroke-dashoffse代表虚线的偏移量
实现过程
设置一个足够长的间距 (大于路径的长度)
设置一个足够长的偏移量,保证刚开始看不到路径。(可以和长度一样)
让偏移变成0 最后在配合css3的animation 增加一个动画过度,实现动画。
path代码
问题来了,path的代码哪里来的
难道自己一个个像素点去算?
当然不是,我们有工具
使用教程:
选择画笔工具
在画板上绘制路线
点击view,导出路径代码
高阶用法
绘制好svn路线之后,如何让物体沿着路径前进
// 配置位移矢量 一共走100步
var STEP = 100;
var curStep = 0;
var path = $('#path')[0];
var $car = $('#car');
var timer = null;
// 最重要的两个属性 获取长度,以及每个点的坐标
var totalLength = path.getTotalLength();
var initPosition = path.getPointAtLength(0);
var prePosition = initPosition;
var curPosition = initPosition;
// 获取前进切线角度
function getRotate(a, b) {
var k = (b.y - a.y) / (b.x - a.x);
var rotate = Math.atan(k) * 180 / Math.PI;
return k < 0 ? rotate + 90 : rotate - 90;
}
// 定位car
$car.css({
left: initPosition.x,
top:initPosition.y,
'-webkit-transform': 'translate(-2px, 0) rotate(' + getRotate(curPosition , path.getPointAtLength(1)) +'deg)'
}).show()
// 定时器控制前进
timer = setInterval(function() {
if (curStep != STEP) {
curStep++;
curPosition = path.getPointAtLength(totalLength/STEP * curStep);
$car.css({
left: curPosition.x,
top:curPosition.y,
'-webkit-transform': 'translate(-2px, 0) rotate('+getRotate(prePosition, curPosition)+'deg)'
}).show();
prePosition = curPosition;
} else {
clearInterval(timer);
}
}, 100)
原理就是将svn的长度平分100次,每100ms走一次,每次的坐标通过 path.getPointAtLength(totalLength/STEP * curStep)计算,然后通过js控制小车的位置。
通过setimeout可以配置小车运动的快慢,还可以通过缓动函数,使小车具有惯性。
android svg路径动画,svg实现自定义路径动画相关推荐
- Android 动画介绍及自定义3D动画效果的基本使用
导语 Android的动画框架包括帧动画.视图动画(又叫补间动画).属性动画.在Android3.0之前,视图动画一家独大,但随之后属性动画框架被推出.相比属性动画,视图动画一个非常大的缺陷就是不具备 ...
- android动画介绍之 自定义Animation动画实现qq抖一抖效果
昨天我们介绍了Animation的基本用法.小伙伴们了解的怎么样了?如果还没有了解过Animation的小伙伴可以看看这篇博客 android动画介绍--Animation 实现loading动画效果 ...
- 自己写的一个动画,包含自定义的动画set
动画集内包含自定义的一个动画,和一个缩放动画. 这个是页面 package com.nico;import android.app.Activity; import android.os.Bundle ...
- swiftui动画之tab自定义切换动画_Unity动画系统详解1:在Unity中如何制作动画?
摘要:在场景中加入动态的物体,可以让整个场景更加生动.真实.Unity场景中的物体可以通过制作动画,让物体动起来.简单的动画如物体的移动.旋转(比如旋转的风扇.闪烁不定的灯泡等),复杂的动画如游戏中角 ...
- swiftui动画之tab自定义切换动画_vue 基础-动画过渡 transition 示例
前言 <vue 基础>系列是再次回炉 vue 记的笔记,除了官网那部分知识点外,还会加入自己的一些理解.(里面会有大部分和官网相同的文案,有经验的同学择感兴趣的阅读) 讲到动画,说真的我自 ...
- Compose 动画艺术探索之可见性动画
本篇文章是此专栏的第二篇文章,上一篇文章简单写了下 Compose 的动画,让大家先看了下 Compose 开箱即用的动画效果,效果还是挺好的,感兴趣的可以去看下:Compose 动画艺术探索之瞅下 ...
- UE4动画系统:什么是动画通知(Anim Notify)
文章目录 什么是动画通知(Anim Notify)? 动画通知的使用方法 1. 直接在动画编辑器中添加动画通知 2. 创建可复用的动画通知类(Anim Notify Class) 补充 什么是动画通知 ...
- SVG基本使用(四、动画、动画常用属性、复合动画/往返动画/形变动画/路径动画、脚本编程
一.动画 1.SVG动画 在SVG中提供了三种常用动画标记 animate:基础动画 animateTransform:形变动画 animateMotion:路径动画 2.SVG动画属性 attrib ...
- android 流畅动画svg,Android自定义View-SVG动画
SVG 1.SVG与Bitmap的区别: SVG是可缩放矢量图形,全称Scalable Vector Graphics.经过数学计算利用直线和曲线绘制而成,无论怎么放大,都不会出现马赛克现象.可以使用 ...
最新文章
- 《评人工智能如何走向新阶段》后记(再续6)
- python数据结构与算法(11)
- cocos2dx[3.2](18)——屏幕截图ScreenShot
- TianyaDL_4thread天涯帖子下载4线程版
- 安卓app与阿里云服务器的无线通信(非局域网)
- Android开机广播和关机广播
- (王道408考研操作系统)第三章内存管理-第一节6-4:非连续分配管理方式之基本分页存储管理之两级页表
- azure云数据库_Microsoft Azure SQL数据库-分步创建教程
- 文档控件正在将数据上传到服务器,关于CellWeb插件中文件打开、上传、以及导入数据库中的问题...
- 如何搭建中国电信物联网云平台
- 22. 协程与Python中的多任务异步协程
- Android 微信聊天页面
- GitHub 热点速览 Vol.16:化身蒙娜丽莎和乔布斯对话
- 网上在线培训平台哪家好?
- 魔法少女小圆计算机音乐,魔法少女小圆 无损音乐合集
- 数数字(UVa1225)
- Python兔鼠大战游戏源代码
- 当今app行业 比较流行的 简称 汇总
- OBD车载诊断系统、移动管家车联网汽车OBD诊断系统车辆信息管理硬件
- Android 锁屏后Service服务保活(支持9.0)