Android---动画机制(四)----SVG

Android群英传笔迹-动画机制 Android群英传笔迹-动画机制视图动画-Animation实现原理优点与缺点视图动画-动画集合属性动画-AnimatorObjectAnimatorPropertyValuesHolderValueAnimator动画事件的监听AnimatorSet在xml中使用属性动画View的animate方法Android布局动画布局动画方式一布局动画方式二插值器 interpolators自定义动画SVG矢量动画机制SVG图形path标签Android中使用SVGVectorDrableAnimatedVec 阅读详情

Google在android5.X中增加了对SVG矢量图形的支持,对高效率的动画具有非常重大的意义.

path标签

使用<path>标签创建SVG,就像用指令的方式来控制一直画笔类似.使用方法有以下几种:

  • M=moveto(M X,Y) : 将画笔移动到某一坐标,未发生绘制
  • L=lineto(L X,Y) : 画直线到指定的坐标位置
  • H=horizontal lineto(H X):画水平线到指定的X坐标位置
  • V=vertical lineto(V Y):画垂直线到指定的Y坐标位置
  • C=curveto(C X1,Y1,X2,Y2,ENDX,ENDY): 三次贝塞曲线
  • S=smooth curveto (S X2,Y2,ENDX,ENDY):三次贝塞曲线
  • Q=quadratic Belzier curve(Q X,Y,ENDX,ENDY):二次贝赛曲线
  • T=smooth quadratic Belzier curveto(T ENDX,ENDY):映射前面路径后的终点
  • A=elliptical Arc(A RX,RY,XROTATION,FLAG1,FLAG2,X,Y):弧线
  • Z=closepath();关闭路径

使用注意事项:

  1. 所有指令大小写均可,大写绝对定位,参照全局坐标系,小写相对定位,参照父容器坐标系.
  2. 指令和数据间的空格可以省略
  3. 同一指令出现多次可以只用一个
  4. 使用A命令来绘制一段弧线,且允许弧线不闭合,可以把A命令看做成椭圆的某一段
    (1)RX,RY指所在椭圆的半轴大小
    (2)XROTATION指椭圆的X轴与水平方向顺时针防线夹角,可以想象成一个水平的椭圆绕中心点顺时针旋转XROTATION度
    (3)FLAG1只有2个值,1表示大角度弧线,0为小角度弧线
    (4)FLAG2也是2个值,确定从起点至终点的方向,1为顺时针,0为逆时针.
    (5)X,Y轴为终点坐标

使用SVG–VectorDrable

VectorDrable
在XML文件中创建SVG图形首先通过<vector> 标签来声明对SVG的使用

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="200dp"
    android:width="200dp"
    android:viewportWidth="100"
    android:viewportHeight="100">
</vector>

heigth和width表示该SVG图形的具体大小 viewportWidth和viewportHeight表示SVG图形的划分比例.两种类型的设置的比例必须保持一直,不然图形就会发生压缩或者是形变.

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="200dp"
    android:width="200dp"
    android:viewportWidth="100"
    android:viewportHeight="100">
    <group android:name="Group Name"
           android:rotation="0">
        <!--fillColor  表示绘制填充图形
            strokeColor 绘制非填充图形
            -->
        <path android:strokeColor="@color/colorPrimaryDark"
            android:strokeWidth="3"
            android:pathData="
            M 25 50
            a 25,25 0 1,0 50,0"/>
    </group>
</vector>

这里写图片描述

AnimatedVectorDrawable

AnimatedVectorDrawable的作用是给VectorDrawable提供动画效果.
AnimatedVectorDrawable比喻一个胶水,来连接静态的VectorDrawable和动态的objectAnimator
首先应该在XML文件中定义:

<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/svg">
    <!--在这里object_animator 对应的是objectAniator属性动画
        name则必须与VectorDrawable中需要作用的name属性保持一致-->
    <target
        android:animation="@animator/object_animator"
        android:name="Group_name"/>

</animated-vector>

svg:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="200dp"
    android:width="200dp"
    android:viewportWidth="100"
    android:viewportHeight="100">
    <group android:name="Group_Name"
           android:rotation="0">
        <!--fillColor  表示绘制填充图形
            strokeColor 绘制非填充图形
            -->
        <path android:strokeColor="@color/colorPrimaryDark"
            android:strokeWidth="3"
            android:pathData="
            M 25 50
            a 25,25 0 1,0 50,0"/>
    </group>
</vector>

最后通过JAVA代码实现:

 AnimatedVectorDrawable drawable= (AnimatedVectorDrawable) imageView.getDrawable();
                drawable.start();

注意
在<group> 标签和<path> 标签中添加了rotation fillColor pathData等属性,在objectAnimator中可以通过指定的android:propertyName="XXXX" 来选择控制哪一种属性. android:valueFrom和android:valueTo 控制其实值和终止值
如果指定的属性为pathData那么就要添加一个属性android:valueType="pathType"来告诉系统进行pathData变换

实例

线性动画

<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000"
    android:propertyName="pathData"
    android:valueFrom="
    M 20,80
    L 50,80,80,80"
    android:valueTo="
    M 20,80
    L 50,50,80,80"
    android:valueType="pathType"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
 >

</objectAnimator>
<vector xmlns:android="http://schemas.android.com/apk/res/android">
    android:height="200dp"
    android:width="200dp"
    android:viewportWidth="100"
    android:viewportHeight="100">
    <group >
        <!--path1和path2分别绘制了两条直线,每条直线又三个点控制
            即起始点和终点,形成初始状态-->
        <path
            android:name="path1"
            android:strokeColor="@android:color/background_dark"
            android:strokeWidth="5"
            android:strokeLineCap="round"
            android:pathData="
            M 20 80
            L 50,80,80,80"/>
        <path
            android:name="path2"
            android:strokeColor="@android:color/background_dark"
            android:strokeWidth="5"
            android:strokeLineCap="round"
            android:pathData="
            M 20,20
            L 50,20,80,20"/>
    </group>
</vector>

效果图:
这里写图片描述

模拟三球仪

首先绘制静态的日地月系统

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="200dp"
    android:width="200dp"
    android:viewportHeight="100"
    android:viewportWidth="100">
    <!--pivot设置圆心-->
    <group
        android:name="sun"
        android:pivotX="60"
        android:pivotY="50"
        android:rotation="0">
        <path
            android:name="path_sun"
            android:fillColor="@android:color/holo_blue_light"
            android:pathData="
            M 50,50
            a 10,10 0 1,0 20,0
            a 10,10 0 1 0 -20,0"/>
        <group
            android:name="earth"
            android:pivotX="75"
            android:pivotY="50"
            android:rotation="0"
            >
            <path
                android:name="path_earth"
                android:fillColor="@android:color/holo_orange_dark"
                android:pathData="
                M 70,50
                a 5,5 0 1,0 10,0
                a 5,5 0 1,0 -10,0"
                />
            <group>
                <path
                    android:fillColor="@android:color/holo_red_dark"
                    android:pathData="
            M 90,50
            m -5,0
            a 4,4 0 1,0 8 0
            a 4,4 0 1,0 -8,0"/>
            </group>
        </group>
    </group>
</vector>

然后下面对两个group分别进行SVG动画.
sun动画:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="360">

</objectAnimator>

earth动画:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="1800">

</objectAnimator>

最后是粘合剂:

<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/earth_vector">
    <target
        android:animation="@anim/path_earth"
        android:name="earth"/>
    <target
        android:animation="@anim/path_sun"
        android:name="sun"/>
</animated-vector>

效果图如图所示:
这里写图片描述

轨迹动画

将propertyName指定为trimPathStart这个属性用来控制一个SVG Path的显示比例,例如一个圆形的SVG,使用trimPathStart动画,可以将画出一个圆一样来绘制一个圆,从而形成一个轨迹动画效果
下面实现一个搜索框中有一个放大镜,点击以后放大镜会按照绘制的轨迹逐渐消失:
首先绘制静态的矢量动画:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="160dp"
    android:height="30dp"
    android:viewportHeight="30"
    android:viewportWidth="160"
    >
    <!--放大镜-->
    <path
        android:name="search"
        android:pathData="
        M 141 17
        A 9,9 0 1,1 142,16
        L149,23"
        android:strokeAlpha="0.8"
        android:strokeLineCap="round"
        android:strokeColor="#ff2570be"
        android:strokeWidth="2"/>
    <!--横线-->
    <path
        android:name="bar"
        android:pathData="M0,23 L149,23"
        android:strokeAlpha="0.8"
        android:strokeColor="#ff2570be"
        android:strokeLineCap="square"
        android:strokeWidth="2"/>
</vector>

属性动画效果

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1500"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:propertyName="trimPathStart"
    android:valueFrom="0"
    android:valueTo="1"
    android:valueType="floatType">

</objectAnimator>

粘合剂:

<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/search_vector">
    <target
        android:animation="@anim/search_obj"
        android:name="search"/>
</animated-vector>

效果图
这里写图片描述

Facebook登录协议逆向实战:从加密参数到完整流程解析(附Python代码) 本文深入解析Facebook登录协议的逆向工程,重点拆解`lgndim`和`encpass`等加密参数的生成逻辑,并提供完整的Python实现代码。通过Base64解码和RSA加密技术,帮助开发者理解并实现Facebook登录流程,同时涵盖工程优化与安全实践。 阅读详情

相关推荐

智慧杯 考试必备

2019.4. 强密码 描述 我们称一个密码是强密码,当且仅当它满足以下所有条件: 由 8 − 16 个字符组成 至少包含一个大写字母 (A-Z) 至少包含一个小写字母 (a-z) 至少包含一个数字 (0-9) 至少包含一个特殊符号 (! @ #$ % & * _ +) 娇娇发现她现在的密码好像不是强密码,请你帮她计算一下最少添加几个 字符可以变成强密码? 输入 输入仅一行,一个字符串,表示娇娇当前的密码 输出 输出一个数表示答案 如果不需要添加任何字符就已.

Fairy1208的博客 2861

Android动画(五):SVG动画

SVG动画

kayyoo的博客 2917

保姆级教程:在爱快iKuai虚拟机里装OpenWrt旁路由,实现去广告和特殊功能

本文提供在爱快iKuai虚拟机中安装OpenWrt旁路由的详细教程,帮助用户实现去广告和特殊功能扩展。通过分步指导,包括虚拟机配置、网络设置和功能优化,打造稳定高效的家庭网络环境,特别适合软路由爱好者和网络管理员。

weixin_31364787的博客 815

svg命令 android,SVG Path命令属性

Android从5.0开始支持SVG矢量图,通过Vector Asset工具将SVG文件转换VectorDrawable定义的XML文件中,在运行时inflate这个xml文件来绘制图层,这对于减小APK资源文件体积和避免混乱的分辨率支持上都有很好的效果,同时Android通过Support支持库的形式给予了低版本的支持。Android上对SVG的支持是受限制的,仅支持SVG tiny1.2版本的...

weixin_36378771的博客 692

用STM32定时器PWM高级功能驱动步进电机:F103C8T6+TB6600实战教程

本文详细介绍了如何利用STM32F103C8T6微控制器的定时器PWM高级功能驱动TB6600步进电机驱动器,实现高效、灵活的运动控制方案。通过硬件配置、PWM参数计算、运动控制算法及TB6600高级功能应用的全面解析,为工业自动化和精密控制领域提供了实用的技术参考。

game4的博客 185

ADRC自抗扰控制:工程抗扰“黑科技”,附C代码实战!

自抗扰控制(ADRC)是一种革新性的强鲁棒控制策略,通过主动估计和补偿系统扰动,无需精确数学模型即可实现优异控制性能。本文详细解析ADRC三大核心组件:跟踪微分器(TD)实现指令柔化,扩张状态观测器(ESO)实时估计总扰动,非线性状态反馈(NLSEF)完成动态补偿。针对二阶系统,文章提供完整的参数设计方法和C语言实现框架,包括关键函数fhan和fal的代码实现。ADRC将复杂对象"线性化"为积分器串联系统,显著提升抗扰能力,特别适用于电机控制、飞行器姿态等存在模型不确定性和强干扰的场景。

技术工作者 1730

android矢量地图画法_如何使用Android的VectorDrawable类绘制矢量图

绘制矢量图形非难事——如何使用Android的VectorDrawable类内容概述尽管Android系统并不能够直接支持SVG(即可缩放矢量图形),但Lollipop版本却引入了一个名为VectorDrawable的新类,其允许设计人员及开发人员以纯代码方式生成类似的绘制效果。在今天的文章中,我们将共同学习如何利用XML文件创建一个VectorDrawable,并将其以动画方式显示在自己的项目当...

weixin_39740737的博客 431

基于51单片机的智能台灯设计:嵌入式程序设计实现

随着智能家居和物联网的快速发展,智能台灯作为一种典型的智能家居产品,已成为现代家庭中不可或缺的设备。传统的台灯只能提供简单的照明功能,而智能台灯不仅具备基础的照明功能,还能根据用户的需求进行自动调节,比如自动调节亮度、色温,甚至具备定时开关、远程控制等智能功能。本文将介绍如何基于51单片机设计一款智能台灯。我们将涉及硬件设计、嵌入式系统架构、传感器选择、调光控制、语音识别、远程控制等方面,详细阐述如何实现这些功能,并给出相关的代码和实现步骤。

2201_76125393的博客 836

android 矢量图动画,Android-Animation-Set

Ⅷ. AnimatedVectorDrawable / 矢量图动画要想彻底搞明白 Android 中的矢量动画,先理解一下关于 SVG 的相关知识还是很有必要的:可以点击 SVG 讲解或 Wiki 查看。我们在这里只讲解 Android SVG 动画 相关的内容。相信大家一定看到过下图这个矢量动画:Android SVG 动画AnimatedVectorDrawable 类使用 ObjectAni...

weixin_28996271的博客 464

Modbus协议介绍及解析

Modbus协议介绍及解析 1.Modbus简介 Modbus是一种广泛应用于工业控制领域串行通信协议,以其开放性、高可靠性、高效简单性、免费等优点,成为了工业领域通信协议的业界标准,是工业现场电子设备之间常用的连接方式。Modbus按其格式可分为Modbus-RTU,Modbus-ASCII,Modbus-TCP,其中前两者适用于串行通信控制网络中,例如RS485,RS232等,而Modbus-TCP主要应用于基于以太网TCP/IP通信的控制网络中。通过此协议,控制器相互之间、或控制器和其它设备之间进行通

逍遥子的博客 1万+

MinerU 系列教程 | 第二课:快速上手 -- 安装与第一次解析

本篇教程作为的第二课,将带你从零完成 MinerU 的环境搭建、模型下载,并成功运行第一次文档解析。上一课我们从宏观视角认识了 MinerU,本课开始正式动手实践。

weixin_43674738的博客 299

Android之 SVG绘制

Android之SVG绘制

qq_29848853的博客 1614

ParaView :在paraview创建渲染视图

ParaView :在paraview创建渲染视图

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1302

Android动画机制与使用技巧(四)Android 5.X SVG矢量动画机制

Google在Android 5.X中增加了对SVG矢量图形的支持,这对于创建新的高效率动画具有非常重大的意义。首先来了解下SVG的含义。 可伸缩矢量图形(Scalable Vector Graphics) 定义用于网络的基于矢量的图形 使用XML格式定义图形 图像在放大或改变尺寸的情况下其图形质量不会有所损失 万维网联盟的标准 与诸如DOM和XSL之类的W3C标准是一个整体 SVG在Web上的应用

提辖鲁的博客 702

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

AnimatedSvgView核心功能详解:从路径解析到动画绘制的完整流程

AnimatedSvgView是一款专为Android平台设计的SVG动画绘制库,能够实现SVG路径的动态描边和填充效果。本文将详细解析其核心功能,包括路径解析机制、动画状态管理以及实际应用方法,帮助开发者快速掌握这一强大工具。 ## 核心功能概览 📊 AnimatedSvgView的核心能力体现在以下三个方面: - **SVG路径解析**:通过PathParser工具类将SVG路径数据转

gitblog_00051的博客 288

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android SVG矢量动画机制

导语 黑科技来了,Google在Android5.X中增加了对SVG矢量图形的支持,这对于创造新的高效率动画具有很深远的意义。 主要内容 < path >标签 SVG常见指令 SVG编辑器 Android中使用SVG SVG动画实例 具体内容首先,我们来了解一下什么是SVG: - 可伸缩矢量图形 - 定义用于网络的基于矢量的图形 - 使用xml格式定义图形 - 图片在放大或者改变尺寸的情

Super丶C 1019

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android SVG 矢量动画机制

Google 在 Android 5.X 中增加了对 SVG 矢量图形的支持。可从如下方面简单了解什么是 SVG。       1、指可伸缩矢量图形 (Scalable Vector Graphics)       2、 用来定义用于网络的基于矢量的图形       3、使用 XML 格式定义图形       4、图像在放大或改变尺寸的情况下其图形质量不会有所损失       5、是万维

antimage08的博客 2172

如何实现Android SVG动画加载:Glide与Lottie的完美融合指南

在Android应用开发中,高效加载和显示矢量图形(SVG)与动画资源是提升用户体验的关键。Glide作为Android平台上最流行的图片加载库,提供了强大的扩展能力,可以轻松集成SVG和Lottie动画支持。本文将详细介绍如何利用Glide实现SVG动画加载的完整解决方案,帮助开发者创建流畅、高效的动画体验。 ## SVG加载的基础原理 SVG(可缩放矢量图形)与传统的位图图像不同,它使用X

gitblog_01066的博客 1117

SVG动画

SVG简介 什么是SVG: SVG矢量动画机制,Google在Android 5.x版本中增加了对SVG的支持 SVG特性: 可伸缩矢量图形 定义用于网络的矢量图形 使用XML格式定义图形 图像在放大或改变尺寸的情况下其图形质量不会有所损失 符合万维网联盟标准 与注入DOM和XSL之类的W3C标准是一个整体 Bitmap和SVG图像的区别: Bitmap是位图,由像素点组成,放大...

DLUT_WJX的博客 1244

Android SVG动画深度解析:从加载瓶颈到性能优化实战

在Android应用开发中,SVG动画的加载性能问题困扰着无数开发者。你是否经历过应用启动时SVG渲染卡顿、内存占用飙升,甚至在某些低端设备上直接崩溃的尴尬局面?本文将深入剖析SVG动画在Android平台上的性能瓶颈,并提供一套完整的优化解决方案。 ## 三大核心痛点:为什么你的SVG动画总是"卡顿"? **1. 渲染性能瓶颈** SVG文件在Android上需要经过复杂的解析和渲染流程,特

gitblog_00511的博客 1047

终极Android SVG动画加载指南:Glide与Lottie无缝集成实战方案

Glide是一款专注于平滑滚动的Android图片加载和缓存库,能够高效处理各种图片格式,包括SVG动画。本文将详细介绍如何在Android应用中使用Glide加载SVG动画,并结合Lottie实现更复杂的动画效果,帮助开发者打造流畅的视觉体验。 ## 为什么选择Glide加载SVG动画? 在Android开发中,SVG(可缩放矢量图形)凭借其无损缩放、小体积和良好的兼容性,成为图标和简单动画

gitblog_00818的博客 701

Android动画机制及其使用

作为交互的一部分,开发Android应用的时候时常会用到动画,这样可以使应用看起来不那么死板。某些较为特定的点击可以使用有趣的动画引起注意,进而可以获取更多的点击量。随着Android系统的不断完善,其动画机制也不断地改进,如早期的帧动画和补间动画,3.0之后加入属性动画,以及之后5.x加入的SVG矢量动画等。以下讲一些较为常用的动画实现方式,即帧动画、补间动画和属性动画。逐帧动画(Frame An

一朝天子一朝陈的博客 5527

如何快速掌握Android Glide:从基础到SVG动画加载的完整指南

Android Glide是一款专注于平滑滚动的图片加载和缓存库,能够帮助开发者轻松处理各种图片加载需求,包括复杂的SVG动画。本指南将带你从基础入门到掌握SVG动画加载到NetworkImageView的全过程,让你的应用图片加载体验更上一层楼。 ## 为什么选择Android Glide? Glide作为Android平台上最受欢迎的图片加载库之一,具有以下核心优势: - **高效缓存机制

gitblog_00405的博客 756

动态SVG动画终极指南:三分钟让你的Android应用炫酷起来!

还在为应用的启动界面平淡无奇而烦恼吗?AnimatedSvgView为你带来革命性的矢量图形动态绘制方案,只需简单几步就能将静态SVG图标转化为令人惊艳的动画效果。这个专为Android设计的开源库,让每一位开发者都能轻松打造专业级的视觉体验。 [![动态SVG动画演示](https://raw.gitcode.com/gh_mirrors/an/AnimatedSvgView/raw/a917

gitblog_01020的博客 697

如何使用Android Pathview打造生动的SVG及路径动画:完整指南

Android Pathview是一个功能强大的Android视图库,能够轻松实现SVG和路径动画效果。无论是从SVG文件还是代码构建的路径,都能通过简单配置实现流畅的动画效果,为你的应用增添生动的视觉体验。 ## 🌟 Android Pathview简介 Android Pathview是一个轻量级的Android视图组件,专注于路径动画的实现。它支持两种主要的路径来源:SVG文件和代码构

gitblog_00157的博客 782

Android 5.X SVG矢量动画机制——Android群英传

SVG : Scalable Vector Graphics 可伸缩矢量图形 与Bitmap比较:Bitmap通过在每个像素点上存储色彩信息来表达图像,而SVG是个绘图标准,最大的优点就是放大不会失真,不需像Bitmap需要为不同分辨率设计多套图标。<path>标签 就像用指令的方式来控制一只画笔常用指令: L:绘制直线 M:移动 A:绘制弧线SVG编辑器 编辑SVG图形 http:

qq_34336018的博客 433
上一篇: Android---Crash三部曲---收集
下一篇: Android6.0---运行时权限
张文靖同学
博客等级 码龄10年 43粉丝 78原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值