android vector pathData探究,几分钟绘制自己的vectordrawable

深度学习流体力学:基于PyTorch的物理信息神经网络(PINN)完整实现 本文介绍了基于物理信息神经网络(PINN)的深度学习流体力学求解器实现。首先阐述了Navier-Stokes方程的理论基础,包括连续性方程和动量守恒方程,并解释了PINN的核心原理:将物理方程作为约束条件嵌入神经网络损失函数。以经典的lid-driven cavity流动为例,详细展示了使用PyTorch实现的全流程,包括神经网络架构设计、自动微分求解Navier-Stokes方程、多约束条件优化训练等关键环节。该求解器通过将物理方程、边界条件和初始条件整合到损失函数中,实现了对流体力学问题的端到端求解,为 阅读详情

之前经常看到一些酷酷的图标效果, 深入进去发现不是直接用的图片, 而是一些以Vector标签开头的xml文件, 于是就看到了如下代码:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="40"
    android:viewportWidth="40">
    <path
        android:fillColor="#f24e4e"
        android:pathData="
                    M8,4
                    h24,0
                    q4,0 4,4
                    v24
                    q0,4 -4,4
                    h-24,0
                    q-4,0 -4,-4
                    v-24
                    q0,-4 4,-4
                    M20,15
                    a5,6 -15 0,0 -9 2
                    C11,22 15,23 20,29
                    C25,23 29,22 29,17
                    a5,6 15 0,0 -9,-2" />
</vector>

心里十万只草泥马在奔腾, 这都是啥 啥 and啥......最近项目迭代完成间隙, 用了些时间研究了下这块, 发现也不是那么难, 只是懂了语法的话, 就容易看懂了.废话不多说, 先看下要实现的效果, 从效果开始深入:


效果还是挺赞的, 圆角矩形中部有个镂空的心形. 代码就是上面的那些代码.

首先看下属性(这里只挑一些个人认为比较重要的) :

android:viewportHeight="40" //将width等分为40份
android:viewportWidth="40" //将height等分为40份

以下是pathData中用到的:
M:move to 移动绘制点,作用相当于把画笔落在哪一点。
L:line to 直线,就是一条直线,注意,只是直线,直线是没有宽度的,所以你什么也看不到。
Z:close 闭合,嗯,就是把图封闭起来。
C:cubic bezier 三阶贝塞尔曲线
Q:quatratic bezier 二阶贝塞尔曲线
A:ellipse 圆弧


基本规则
pathData 的指令基本都是由字母跟若干数字组成,数字之间可以用空格或者逗号隔开 (其实逗号会被忽略掉,加上逗号只是一些习惯的问题)。一般来说指令字母分为大小写两种,大写的字母是基于原点的坐标系(偏移量),即绝对位置;小写字母是基于当前点坐标系(偏移量),即相对位置。


移动: 

M(X,Y) 移动到指定点(X,Y),  m(dx,dy)表示移动到相对当前点的相对dx,dy坐标位置

划线:

L(X,Y) 从当前点划线到(X,Y),  l(dx,dy)表示划线到相对当前点dx距离,dy距离坐标位置

H(X)水平方向划线: y坐标保持不变,划线到x坐标位置, h(dx)表示划线到距离当前坐标dx距离位置(y坐标保持不变) 

V(Y)竖直方向划线: x坐标保持不变,划线到y坐标位置, v(dy)表示划线到距离当前坐标dy距离位置(x坐标保持不变)

弧线:

A rx,ry x-axis-rotation large-arc-flag,sweepflag x,y

    a rx,ry x-axis-rotation large-arc-flag,sweepflag dx,dy

rx ry表示画弧的半径, x-axis-rotation 表示沿x轴旋转角度, large-arc-flag为0时表示取小弧线,为1时表示取大弧线

    sweepflag为0时表示逆时针方向画弧,为1时表示顺时针方向画弧. x,y表示终点目标的坐标,dx,dy表示起到到终点相对坐标距离.


好了, 看到这里我们就可以绘制以下图形了:



分析: 此图可由4段线段加上4个圆弧构成,将画布分成40份, 则对应关键点的坐标如下图所示:



对应代码:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="40"
    android:viewportWidth="40">
    <path
        android:fillColor="#f24e4e"
        android:pathData="
                    M8,4
                    h24,0
                    q4,0 4,4
                    v24
                    q0,4 -4,4
                    h-24,0
                    q-4,0 -4,-4
                    v-24
                    q0,-4 4,-4" />
</vector>


先移动到(8,4)点,然后画水平直线,然后根据起始点 控制点 终点可以画出右上角的圆弧,然后画竖直线段,以此类推,这个图形就轻而易举的画出来了,是不是挺简单,好,继续深入.为了画出心形图案,还需要学习贝塞尔曲线才能画出.


二阶贝塞尔曲线:

                Q x1,y1 x,y ( q dx1,dy1 dx,dy) 

     对应的贝塞尔二阶公式为

 


三阶阶贝塞尔曲线:

        Q x1,y1 x2,y2 x,y ( q dx1,dy1 dx2,dy2 dx,dy) 

     对应的贝塞尔三阶公式为



也就是说为了完成一个二阶贝塞尔曲线,需要确定一个起始点,一个控制点和一个终点,依次传入参数,所以这里的重点是控制点的确定,三阶的也是这样,需要起始点,两个控制点和一个终点.


先画个心形图案练练手吧.

图形解析:


根据图片可以看出需要4段弧线组成这个心形, 上边的两段圆弧和下边的两段曲线,各个弧线的起始点和控制点,终点都确定了,接下来就简单了,上代码:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="40"
    android:viewportWidth="40">
    <path
        android:fillColor="#f24e4e"
        android:pathData="
                   M20,15
                   a5,6 -15 0,0 -9 2
                   C11,22 15,23 20,29
                   C25,23 29,22 29,17
                   a5,6 15 0,0 -9,-2" />
</vector>

接下来就可以考虑画出文章开始给出的那个镂空心形图,由于中间是镂空的,所以采取两个pathData标签叠加不可取,可以先顺时针画出矩形,然后逆时针画出心形就可以了.

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="40"
    android:viewportWidth="40">
    <path
        android:fillColor="#f24e4e"
        android:pathData="
                    M8,4
                    h24,0
                    q4,0 4,4
                    v24
                    q0,4 -4,4
                    h-24,0
                    q-4,0 -4,-4
                    v-24
                    q0,-4 4,-4
                    M20,15
                    a5,6 -15 0,0 -9 2
                    C11,22 15,23 20,29
                    C25,23 29,22 29,17
                    a5,6 15 0,0 -9,-2" />
</vector>

代码就是这样了,是不是挺简单,最起码又一个知识点get了

多个pathData标签叠加需要使用<group></group>, 另外还有一些属性,

path
android:name 定义该 path 的名字,这样在其他地方可以通过名字来引用这个路径
android:pathData 和 SVG 中 d 元素一样的路径信息。
android:fillColor 定义填充路径的颜色,如果没有定义则不填充路径
android:strokeColor 定义如何绘制路径边框,如果没有定义则不显示边框
android:strokeWidth 定义路径边框的粗细尺寸
android:strokeAlpha 定义路径边框的透明度
android:fillAlpha 定义填充路径颜色的透明度
android:trimPathStart 从路径起始位置截断路径的比率,取值范围从 0 到1
android:trimPathEnd 从路径结束位置截断路径的比率,取值范围从 0 到1
android:trimPathOffset 设置路径截取的范围,取值范围从 0 到1
android:strokeLineCap 设置路径线帽的形状,取值为 butt, round, square.
android:strokeLineJoin 设置路径交界处的连接方式,取值为 miter,round,bevel.
android:strokeMiterLimit 设置斜角的上限

group :主要是用来设置路径做动画的关键属性的
android:name 定义 group 的名字
android:rotation 定义该 group 的路径旋转多少度
android:pivotX 定义缩放和旋转该 group 时候的 X 参考点。该值相对于 vector 的 viewport 值来指定的。
android:pivotY 定义缩放和旋转该 group 时候的 Y 参考点。该值相对于 vector 的 viewport 值来指定的。
android:scaleX 定义 X 轴的缩放倍数
android:scaleY 定义 Y 轴的缩放倍数
android:translateX 定义移动 X 轴的位移。相对于 vector 的 viewport 值来指定的。
android:translateY 定义移动 Y 轴的位移。相对于 vector 的 viewport 值来指定的。

clip-path:定义当前绘制的剪切路径。注意,clip-path 只对当前的 group 和子 group 有效
android:name 定义 clip path 的名字
android:pathData 和 android:pathData 的取值一样。

vector:定义这个矢量图
android:name 定义该drawable的名字
android:width 定义该 drawable 的内部(intrinsic)宽度,支持所有 Android 系统支持的尺寸,通常使用 dp
android:height 定义该 drawable 的内部(intrinsic)高度,支持所有 Android 系统支持的尺寸,通常使用 dp
android:viewportWidth 定义矢量图视图的宽度,视图就是矢量图 path 路径数据所绘制的虚拟画布
android:viewportHeight 定义矢量图视图的高度,视图就是矢量图 path 路径数据所绘制的虚拟画布
android:tint 定义该 drawable 的 tint 颜色。默认是没有 tint 颜色的
android:tintMode 定义 tint 颜色的 Porter-Duff blending 模式,默认值为 src_in
android:autoMirrored 设置当系统为 RTL (right-to-left) 布局的时候,是否自动镜像该图片。比如 阿拉伯语。
android:alpha 该图片的透明度属性



感谢: http://www.jianshu.com/p/a3cb1e23c2c4#rd




Python 爬虫实战:淘宝直播间实时数据抓取(弹幕分析 + 流量监控) 随着电商直播的迅猛发展,淘宝直播已成为品牌推广和商品销售的重要阵地。通过爬取淘宝直播间的实时数据,包括弹幕互动和流量信息,可以帮助商家深入了解用户行为、优化直播策略,同时为市场分析和商业决策提供数据支持。本文将深入探讨如何利用 Python 爬虫技术实现对淘宝直播间实时数据的抓取,并进行弹幕分析和流量监控。 阅读详情

相关推荐

5分钟搞懂MSDNet:用Transformer实现小样本语义分割的保姆级教程

本文详细介绍了MSDNet(Multi-Scale Decoder Network)如何利用Transformer架构实现小样本语义分割。通过多尺度解码器和空间Transformer解码器,MSDNet能够在仅有1-5张标注图像的情况下完成精确分割任务。文章提供了PyTorch代码实例和优化技巧,帮助开发者快速掌握这一前沿技术。

weixin_30832143的博客 506

Android 矢量图 pathData 路径svg 详解

Android 矢量图 pathData 路径svg 详解

weixin_42602900的博客 4623

DEM边界数值爆炸?用ArcGIS空间分析工具链搞定异常值过滤全流程

本文针对DEM数据处理中常见的边界数值爆炸问题,提供了一套完整的ArcGIS空间分析解决方案。文章深入剖析了异常值产生的根源,并详细介绍了从诊断、定位到使用栅格计算器、重分类等工具进行精准过滤与修复的全流程工作流,帮助用户彻底解决由插值误差、数据拼接及坐标系转换引发的数值异常。

weixin_29269441的博客 147

android PathData生成问题

Path的Data数据有三种生成方式: 1. 最简单的是用Expression Design。可以粘贴来自其它软件的矢量图形。导出时选择,文件->导出->导出属性->格式->XAML Silverlight 画布,即可得到XAML格式的矢量图形,也就是Path。 2. 如果只是把文字转成图形,相当于印刷行业里的文字转曲,可以直接用Expression Blend。对象->路径->转换为

billy_lin_520的专栏 1888

OAI骨关节炎数据集申请与DICOM下载全流程避坑指南

医学影像分析中,DICOM格式是存储与交换CT、MRI等数据的通用标准,其元数据Tag承载着像素间距、层厚等关键物理信息,直接影响定量分析的准确性。在骨关节炎研究领域,OAI数据集因样本量大、随访时间长而成为高价值资源,但获取需通过NDA协议申请,并借助nda-tools命令行工具完成TB级影像的批量下载与断点续传。这一流程涉及浏览器环境配置、DICOM格式转换及Python预处理等工程环节,任一细节疏漏都可能导致数据读取异常或分析偏差。掌握从申请到落地的完整链路,能显著提升医学影像AI研究的效率与可复现性

weixin_30843121的博客 275

Android 集成Chrome 浏览器内核 Crosswalk

Crosswalk 内核的兴起与消亡 Android 4.4 版本之前,使用的是基于 androidWebKit 的 WebView 但实际上,由于 Android 的碎片化问题(大量存在不同的 Android 系统版本,并且各个厂商对内置应用进行定制化,有可能用的不是最新的浏览器内核)。这就导致 WebView 在真实环境中对 API 的支持根本无迹可寻,越发混乱。 随着混合开发的兴起,前端对 ...

司马懿的西山居 2万+

android vector矢量图画图详解

SVG是一种矢量图格式,是Scalable Vector Graphics三个单词的首字母缩写。在xml文件中的标签是,画出的图形可以像一般的图片资源使用,例子如下: vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="

小鬼不离 8518

窥秘Windows 10:SAM密码破解

Windows 10作为广受欢迎的操作系统,拥有一套强大的安全措施来保护用户账号和数据安全。然而,有时候我们需要了解更多关于密码破解的知识,以加强我们的防护措施。本文将深入探讨如何突破Windows 10的SAM密码,以便更好地了解密码安全性并加强系统的保护。

Sgirll的博客 6837

Android vector 标签 pathData 详解

转载地址:http://www.jianshu.com/p/a3cb1e23c2c4#rd Android Support Library 23.2 出来以后,在Android 5.0(API级别21)以前的系统中,也可以定义矢量drawables,即VectorDrawable。它可以在不失清晰度的情况下进行缩放。你仅仅需要需要一个矢量图片的资源文件,而不再需要为每个屏幕密度设置一个资

scott2017的博客 1万+

内部威胁论文阅读笔记(CMU-CERT专场)

在网上看了很多介绍该数据集的博客,一直有个疑问,这个数据集的标注在哪,本着先入为主的想法结合现有的资料对这个数据集的结构做了一下猜测(可能还是不严谨和正确)1.标注在哪2.什么是密集针模型3.场景文章连接内部人员由于可以绕过安全检测发起攻击,通常最有害的攻击被认为是内部人员发起。通过分析用户行为来检测内部威胁,主要分析一些类时间和活动进行特征选择。选择特征向量用于训练。采用cmu-certr4.2用于训练。提出的算法与。

Jerry的博客 2800

【k8s故障处理篇】calico-node启动失败“Felix is not live: Get “http://localhost:9099/liveness” 解决办法(V1.30.3版本)

【k8s故障处理篇】calico-node启动失败“Felix is not live: Get “http://localhost:9099/liveness” 解决办法(V1.30.3版本)

jks212454的博客 1090

【Android Studio】的矢量绘图【pathData】详解

注意:很多人都以为这是画直线的,确实有画直线的功能,但是仅仅靠它却不能实现画直线。也就是说,画直线其实是先画矩形,然后再往矩形里面填充颜色,直线的粗细由矩形的宽决定。这里需要注意的是,小写的L(l)和数字1非常像,所以一定要区分,一般数字1的左上角都是45°的尖角,而字母l最多是平角。最后一个注意点:关于颜色填充的问题,一般而言,都是往一个封闭的图形中填充的。最后一个坐标是指移动起始坐标,也就是开始画的坐标。A/a(坐标1)——0/旋转角度——0/1—— 0/1 ——(1,0)大写绝对,小写相对。

许多仙的博客 2279

从数字后端角度谈谈occ电路(一)

摘要:本文介绍了芯片测试中OCC(On-Chip Clock Control)电路的设计与应用。随着工艺进步,芯片制造面临Stuck-at、Bridging和Delay等故障类型,需要不同时钟频率进行测试。OCC电路通过Clock Selection、Clock Chopping Control和Clock Gating三个模块,实现ATE时钟与PLL时钟的切换控制,支持慢速时钟检测Stuck-at故障和快速时钟检测Delay故障。文章详细解析了OCC电路结构及各模块功能,包括同步单元、移位寄存器等关键组件

芯冰乐 585

android仿今日头条下拉刷新中的vector动画

一直有留意到今日头条下拉刷新的效果, 真的很赞,在学习了svg drawable相关资料后, 参考博客http://blog.youkuaiyun.com/u012950099/article/details/52040028完成了今日头条下拉刷新中的动画, 首先看下效果图:录制效果有点渣,少了上边和下边两条线, 请大家见谅.....ps: gif中还有仿ios菊花loading效果, 仿qq下拉刷新效果,侧...

栀夏暖阳的博客 697

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android 12闪屏页:SplashScreen API接入与兼容适配

App启动体验是用户感知产品品质的第一道门槛,而冷启动耗时往往集中在系统加载、进程创建与首帧绘制阶段。闪屏页正是用于衔接这一过程的关键设计,其本质并非一张静态图片,而是通过主题配置与系统启动流程协同的过渡层。Android 12推出的SplashScreen API将闪屏能力系统化,配合兼容库可在低版本上统一表现。开发者可通过主题属性定制图标、背景色与退出动画,并利用setKeepOnScreenCondition控制消失时机,为异步初始化争取时间。结合启动优化指标,合理设计闪屏页能显著提升应用的启动流畅度

weixin_33928137的博客 220

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android Studio pathData

安卓新手         在Android Studio使用pathData时发现 android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z" 代码不了解是什么东西上网搜了之后出现了好多方法但没有直接说明的 上图中小图的引用 一、Drawable->New->Vector Asset

S_YANG_L的博客 3318

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android pathdata,android:pathData 属性

先来说明下,大写字母表示绝对位置,小写字母表示相对前一个点的位置一、直线(1)只标注点x、y 分别表示点的横、纵坐标,不做绘制操作M x, y(2)画线L 用来画某个点到(x, y)的直线L x, yH 用来画横坐标的线,参数表示直线长度H xV 用来画纵坐标的线,参数表示直线长度V y(3)闭合L 起点坐标 可实现闭合,或者 Z 来实现L 0, 0Z二、曲线(1)贝塞尔曲线三次贝塞尔曲线(x1,...

weixin_39543647的博客 1799

android 矢量图PathData的属性

链接:https://www.cnblogs.com/yuhanghzsd/p/5466846.html

xcj1409385086的博客 1253

【转】Android vector Path Data画图详解

SVG是一种矢量图格式,是Scalable Vector Graphics三个单词的首字母缩写。在xml文件中的标签是,画出的图形可以像一般的图片资源使用,例子如下: vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp

XU_DONG_ZHENG的博客 1284

Android使用Vector进行适配和瘦身

Vector语法简介Path指令解析如下所示:支持的指令: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 = qu

2401_84414763的博客 876

简单修改Vector底层path颜色

图: 需要把底层颜色变透明,但其他地方使用需要保持原样。 将xml中底层颜色直接改成透明 android:fillColor="#00000000" 需要使用底层为具体颜色的地方利用属性设置 android:background="#F591F1" 仍解决不了的话,考虑通过setTint,tineMode,colorFilter改变 总结: xml文件在项目中优先重用,节省资源; 而资源图形设计选择底色透明,使得资源更便于重用 ...

m.t.u 1043

android vector图大小,Android vector标签 PathData 画图超详解

SVG是一种矢量图格式,是Scalable Vector Graphics三个单词的首字母缩写。在xml文件中的标签是,画出的图形可以像一般的图片资源使用,例子如下:android:width="24dp"android:height="24dp"android:viewportHeight="24.0"android:viewportWidth="24.0">android:fillCol...

weixin_39991055的博客 1684

Android vector pathData命令介绍

在Android开发中,可以使用矢量图来代替一些小图标,下面一起了解常用命令,最后用这些命令画出微信图标。 这篇文章也可以在这里看到。 命令 表格中,大写命令代表绝对位置,小写命令代表相对位置(相对位置就是以前一个坐标为原点,绝对位置永远以(0, 0)为原点) 参数中的 + 代表至少要有一对参数 参数和参数之间可以用逗号分割,也可以用空格分隔 命令

不吃萝卜de兔子 3051

android矢量动画的使用&Path.java与pathData

背景 位图:像素表示图像 矢量图:数学方程表示图像 维基百科 矢量动画:不断改变矢量图的属性(方程式)形成动画 属性动画(ValueAnimator):在指定的时间内(Time),指定的变化速率下(TimeInterpolator),不断返回指定的(TypeEvaluator)中间值的&amp;quot;中间值生成器&amp;quot; 实现 Step1 创建'实现矢量动画需要的三个文件':矢量图、属性动画、助手类 re...

yfbdxz的博客 1072

Android PathData生成问题

Android PathData生成问题

橡果生长记的博客 2393
上一篇: 属性动画系列之ViewPropertyAnimator
下一篇: 最新配置dagger2,亲身经历,教你少走弯路!
MrCoderr
博客等级 码龄12年 39粉丝 48原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值