从0到1Android自定义View(三)画图的五个元素组件

React-Native系列Android——自定义View组件开发 如何自定义Android原生视图组件,并在React-Native开发中使用 阅读详情

Android.jpg

前言

迟来的第三篇,这篇还是知识点,不过没有细讲每个方法的运用等等,因为我个人觉得,API 方法是变的,且死记硬背效果不佳,当然能记住是好事,我们必需学会在编程中猜想和查找到对应的方法,所以这里提供的只是一些方法的概况,下一篇就是进行实践来完善这些知识点。

目录

从0到1Android自定义View(三) 画图的五个元素组件.png

一、画图五个元素组件简介

Android Framework 提供了一些 2D 画图的 API,android.graphics 包就是其中之一。

通常我们在自定义 View 中需要画一些东西,那么基本就是需要 5 个元素组件协同来完成的。这 5 个组件分别是:

  • 颜色:Color

  • 位图:Bitmap 来保持(hold)那些像素,通过 Matrix 来使图像变换,如平移、旋转、缩放、扭曲等

  • 画布:Canvas 来响应画画(draw)的调用(并将其写入 bitmap)

  • 画笔:Paint 描述画画的颜色和样式等

  • 路径:Path 根据路径绘制文本和剪裁画布

其实这也很好理解,编程其实就是根据生活哲学创造的。比如 JAVA 的编程思想就是:万事万物皆对象。在现实生活中,我们需要画一些东西,也是需要画纸,画笔,颜料等等,因此自定义 View 中,我们需要画一些东西,也是离不开画布(Canvas),画笔(paint),其中我们可以调整画布的颜色和画笔的颜色。

下面我们一个一个类的看下相关的知识点,虽然会有点闷,可是感觉这又是必需的,过完这些知识点后,就开始一些实战的运用了。

二、颜色:Color 类

Color 我们应该是接触的比较多的,因此只是简单的介绍一下使用方式。Android 系统中颜色的常用表示方法有以下 3 种:

1、int color = Color.BLUE;

2、int color = Color.argb(150,200,0,100);

3、在xml文件中定义颜色;

三、位图:Bitmap 类

1、Bitmap 类在自定义 View 中的简介

Bitmap (android.graphics.Bitmap),是 Android 系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。

当然,在自定义 View 中使用最多的操作大概就是一些剪切,旋转等动画功能了。因为 Bitmap 涉及的方面挺广的,因为这是自定义 View 系列,主要是介绍如何通过 Matrix 在 Android 中的使图像( Bitmap )变换,如平移、旋转、缩放、扭曲等。

2、Matrix 简介

Matrix 内部通过维护一个 float[9] 的数组来构成 3x3 矩阵的形式,而实际上所有的变换方法说到底就是通过更改数组中某个或某几个位置的数值。Matrix 提供了 setValues() 和 getValues() 方法来操作数组。

Matrix 矩阵格式.png

实际上我们平常利用 Matrix 来进行 Translate(平移)、Scale(缩放)、Rotate(旋转)的操作,就是在操作着这个矩阵中元素的数值来达到我们想要的效果。但是现在问题来了,上面提到的平移、缩放、旋转操作中,旋转和缩放可以用乘法表示,而平移就只能用加法表示,而且 Matrix 是一个 3 X 3 的矩阵,实际上表示这些操作 2 X 2 的矩阵足矣!

Matrix的平移、缩放、旋转的矩阵.png

如上,可以依次看到平移、缩放、旋转的矩阵,其中

  • (x’,y’)表示执行操作后的点的坐标

  • (x,y)表示执行操作前的点的坐标

  • tx、ty 分别表示 x 轴、y 轴上平移的距离

  • Sx、Sy 分别表示x轴、y轴上的缩放比例

  • θ 则表示旋转角度

其实在计算机图形应用涉及到几何变换,主要包括平移、旋转、缩放。以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘。不过,通过齐次坐标(齐次坐标有着广泛的应用,包括电脑图形及 3D 电脑视觉。使用齐次坐标可让电脑进行仿射变换,并通常,其投影变换能简单地使用矩阵来表示。),将平移的加法合并用乘法表示。

3、Matrix 9 个元素的作用

上面都提到了 Matrix 是一个 3 X 3 的矩阵,也就是说一个 Matrix 共有 9 个元素,那么它每个元素的值发生改变会起到什么作用呢?

Matrix 基本变换有 4 种: 平移(translate)、缩放(scale)、旋转(rotate) 和 错切(skew)。这 4 种变换都是由矩阵中的 9 个元素参数控制的

Matrix 9 个元素的作用.png

上面提到了平移(translate)、缩放(scale)、旋转(rotate) 和 错切(skew) 都是由这 9 个元素控制的,当然,Android 给我们提供了一系列的方法函数,且这些变换操作,每一种操作在 Matrix 均有三类,前乘(pre),后乘(post)和设置(set)

常用API包括下面的组合形式

setprepost
translatesetTranslatepreTranslate
scalesetScalepreScale
rotatesetRotatepreRotate

我们用translate来讲

setTranslate() 指定了移动的位置,不需要通过左乘右乘

postTranslate() 在方法内部进行的是 M' = T(dx, dy) * M,t 左乘m

preTranslate() 在方法内部进行的是 M' = M * T(dx, dy),m左乘t

post,pre的乘法计算顺序是相反的,矩阵乘法不满足交换律,所以计算结果几乎是不同的。

可能不太好理解,不过先要知道有这回事,之后通过实践就能很好的理解了。当然,Matrix 提供的 API 方法还有很多,罗列出来给各位看,效果也不是很好,主要是 API 方法是会变的,因此我们最重要的技能还是学会在编程中看 API 方法,查看源码或者源码中的解释介绍来看和了解相关方法的作用。

四、画布: Canvas 类

1、Canvas 类简介

Canvas,画布,能够在上面绘制各种东西,是安卓平台 2D 图形绘制的基础。因为 Canvas 类是构成上层的基础,所以它的可操作性强,里面提供的方法也是相对基础的,因此想弄成复杂一点的图像是有一定的难度的。

2、Canvas 类提供的 API

其实我的看法跟上面一样,不全列出来 Canvas 类提供的 API 方法,因为太多了,列出来,相信各位也不会细看,太多的话,更不容易让各位了解记忆。所以大概总结一下, 用到可以打关键字,就能在 AS 或者 Eclpise 中查到相关的方法了。

Canvas 提供的绘制图形的方法,基本都是以 draw 开头的。好,我们只要知道这个,我们只要打出关键字就可以知道相关的方法了,例如:

Canvas draw方法.png

从上面方法的名字看来我们可以知道 Canvas 可以绘制的对象有:弧线(arcs)、填充颜色(argb 和color)、 Bitmap、圆(circle 和 oval)、点(point)、线(line)、矩形(Rect)、图片(Picture)、圆角矩形 (RoundRect)、文本(text)、顶点(Vertices)、路径(path)。

我个人是比较不提倡死记硬背有哪些 API 方法的,通过思考,猜想 Google 的工程师可能会提供什么方法出来,比如,上面的,Canvas 类提供了可以绘制的对象,可是只有这些,还是不够的,为什么?因为我们看到的自定义 View 都是附带一些动画的,比如选择等等,所以我们可以知道,Android 会提供了一些对 Canvas 位置转换的方法:rorate、scale、translate、skew(扭曲)等。而且它允许你通过获得它的转换矩阵对象,也就是上面所介绍的。这些操作就像是虽然你的笔还是原来的地方画,但是画纸旋转或者移动了,所以你画的东西的方位就产生变化。为了方便一些转换操作,Canvas 还提供了保存和回滚属性的方法( save 和 restore ),比如你可以先保存目前画纸的位置(save),然后旋转 90 度,向下移动 100 像素后画一些图形,画完后调用 restore 方法返回到刚才保存的位置。

五、画笔: Paint 类

1、Paint 类简介

Paint 类包含有用来画几何图形、文本、位图的类型和颜色等信息,如果把 Canvas 类看作是画板,那我们可以把 Paint类 看做是画笔,可以根据需要画出不同颜色和样式的图形、文本等内容。其实基本 Paint 类和 Canvas 类都是结合使用的。

2、Paint 类提供的 API

Paint 类提供了很多方法来设置和获取 Paint 对象的属性,像上面提到的观点一样,猜下会提供什么 API 方法,竟然是画笔,我们现实中有不同的颜色的画笔,所以 API 提供了的很多方法来设置和获取Paint 对象的属性,像刚提到的颜色值(setColor),Alpha 值(setAlpha),字体尺寸(setTextSize)和画笔风格,空心或者实心(setStyle)等等。当然有 set 方法肯定也会有对应的 get 方法。

六、路径:Path 类

1、Path 类简介

Path 类的官方定义:路径,即无数个点连起来的线。其实也就是说 Path 类封装了由直线和曲线构成的几何路径。

2、Path 类作用

上面提到的绘制都是简单图形(如 矩形 圆 圆弧等),而对于那些复杂一点的图形则没法去绘制(如绘制一个心形 正多边形 五角星等),而使用 Path 不仅能够绘制简单图形,也可以绘制这些比较复杂的图形。另外,根据路径绘制文本和剪裁画布都会用到 Path。

3、Path 类提供的 API

Path 类相对来说,提供的方法不是三言两语就能说明白的,需要通过实践来体会,这里只是简单的提下,还是要通过往后实践来加深理解的。

Path 类,上面提到可以绘制复杂的图形,因此会有基本绘图方法。比如绘制圆形(addCircle),绘制直线(lineTo)和绘制圆角矩形(addRoundRect)。这时我们就会想到,不是绘制复杂的图形吗,这些都是基本的图形啊。那么怎么绘制复杂的图形呢,当然复杂的图形都是有基本的图形演变来的,那么 Path 提供了什么特别的 API 吗?所以 Path 提供了 lineTo,moveTo,quadTo,cubicTo 以及与之对应的 rLineTo ,rMoveTo ,rQuadTo,rCubicTo的方法。比如 lineTo(float x, float y),绘制一条 x 到 y 的直线,因为两点决定一条直线,所以提供两个点就行了。而 rLineTo 呢?rLineTo 方法是基于当前绘制开始点的offest。比如当前 paint 位于 (100,100) 处, rLineTo(100,100) 方法绘制出来的直线是从 (100,100) 到 (200,200) 的。也就是 rXXX 方法方便用来基于之前的绘制作连续绘制。

当然 Path 类还有一些其他的方法,比如移动画笔到 (x,y) 处:moveTo(float x,float y),设置当前 path 的终点: setLastPoint(float x,float y) 等等一些列的方法。

安卓面试之自定义View流程及原理 自定义View原理学习博客整理 阅读详情

相关推荐

【Android笔记62】Android之自定义View组件

Android中,所有的UI组件都是继承自View类的,所以我们自定义View组件的时候,也需要自己编写一个类继承自View类,然后重写其中的对应方法即可。第一步:添加自定义控件属性。第二步:自定义组件类,继承自View类。第三步:将自定义的控件属性和自定义的View关联起来。第四步:绘制自定义的View控件,重写【onDraw()】方法。第五步:设置自定义View控件的显示位置,重写【onMeasure()】方法。第六步:添加自定义View控件的事件。

✅ Java 开发工程师 1219

Android 开发————9、绘图与多媒体

在Android中,绘制图像最常用的就是Pain类(画笔)、Canvas类(画布)、Bitmap类(位图)、BitmapFactory(工具类)有画笔与画布就可以作画了!画笔创建一个画笔,指定该画笔的颜色为红色,并且带有浅灰色的阴影:Paint paint=new Paint(); paint.setColor(Color.RED); paint.setShadowLayer(2,3,3,Colo...

Fly_鹏程万里 586

android绘图 自定义组件

这是开发当中经常使用的机制:android 绘图、自定义组件。可以自定义很酷炫的效果。

【Android】【GUI】01-绘图基本组件及其关系

【Android】【GUI】01-绘图基本组件及其关系1 绘图的基本组件2 绘图基本组件的理解2.1 Bitmap2.2 Canvas2.3 Drawing Primitive2.4 Paint 1 绘图的基本组件 Android官方文档中,描述如下: To draw something, you need 4 basic components: A Bitmap to hold the pixels; A Canvas to host the draw calls (writing into the b

慕容陌尘的博客 2064

Github上最火的Android开源项之Android-Smart-Image-View

Android Smart ImageView github 开源项目,能够让开发者在开发过程中很方便快捷的加载网络图片资源,只需要几行代码 smartImageView.setImageUrl( etUrl.getText().toString(),R.drawable.ic_launcher, R.drawable.ic_launcher);

Eplan P8自动线号生成全攻略:从电位定义点到连接编号的完整流程

本文详细解析了Eplan P8自动线号生成的全流程,从电位定义点的创建配置到连接编号的标准化管理,帮助电气设计人员提升图纸规范性和工作效率。重点介绍了自动编号方案的定义与调整技巧,以及企业级标准化实施建议,是掌握Eplan P8自动线号功能的实用指南。

weixin_29254029的博客 510

android开发常用的组件,Android开发常用的几个组件

如果是熟悉安卓的开发者都会知道,在Android的架构里面是有4种应用程序,分别是Activity,Service服务,ContentProvider内容提供者,以及BroadcastReceiver广播接收器。本文将介绍一下这四个组件是怎样的。我们知道Android操作系统,实际上是一个复杂的操作平台,并且也是包含了多种功能的一些模块,比如用户界面系统、系统间通信系统、数据库系统和定位服务等,并...

weixin_42298973的博客 382

避坑指南:ZYNQ平台上AXI 1G/2.5G Ethernet Subsystem实现IEEE1588的5个关键点

本文详细解析了在ZYNQ平台上使用AXI 1G/2.5G以太网子系统实现IEEE1588精密时间协议(PTP)的5个关键避坑点。从硬件选型、Vivado工程配置到Linux驱动适配,提供了实战经验与优化技巧,帮助工程师在工业自动化、电力系统等场景中实现纳秒级时间同步。

weixin_30687051的博客 232

android多媒体框架介绍(二)显示图形系统初步整体分析

文章目录APP与Surface画布---用于应用创建图元单元SurfaceFlinger服务---统一操作显示设备的服务(HAL) Gralloc模块---用于显存的管理,FB调用的HAL层中间层(HAL)HWCompose模块---用于显示层叠加(软件叠加/硬件叠加)(kernel)FrameBuffer驱动---硬件驱动,用于叠加后的图形显示相关推荐 用一个很粗糙的框图体现显示系统整体流程: APP与Surface画布—用于应用创建图元单元 在每一个应用中都以Surface作为一个图元传递单元,向Su

runafterhit的博客 4276

AI智能体安全沙箱agentguard:为LLM代码执行筑起防火墙

在AI应用开发领域,大语言模型(LLM)驱动的智能体(Agent)能够自动生成并执行代码,极大地提升了自动化能力。然而,赋予AI直接执行系统命令的权限也带来了显著的安全风险,如恶意代码注入、敏感数据泄露和系统资源滥用。为了解决这一核心矛盾,安全沙箱技术应运而生,它通过在不可信代码与宿主系统之间建立隔离层,实现"默认拒绝、最小权限"的安全原则。agentguard项目正是这一理念的工程实践,它结合白名单机制与容器化隔离,为AI智能体提供了可配置、可审计的安全执行环境。该方案不仅适用于内部自动化工具开发,也为构

weixin_28695537的博客 296

2024年全国大学生信息安全竞赛安徽省赛网络系统建设与运维赛项-网络构建真题

该网络工程方案主要包含基础配置、有线网络、无线网络、出口网络、运维配置和SDN网络六个部分。基础配置包括设备接口设置、SSH服务开启和SNMP功能配置。有线网络部分重点部署VLAN、MSTP、VRRP和OSPF协议,实现网络冗余和负载均衡。无线网络规划了AP点位、信号覆盖和用户接入策略,包括SSID配置、频段优化和安全认证。出口网络配置了NAT转换、VPN隧道和流量审计功能。运维方面搭建了监控平台实时监测设备状态。SDN网络部分通过控制器实现流量管控。整个方案实现了多业务隔离、高可用性网络架构和

weixin_42221934的博客 1174

Android 几种常用组件介绍及UI结构介绍

bAndroid应用界面开发 应用结构分析 基本组件认识 Text View 和 EditText 的功能与应用 Button 和 ImageButton 的功能与应用 消息提示框 Toast 应用结构分析 应用组件 应用组件是 Android 应用的基本构建块。每个组件都是一个入口点,系统或用户可通过该入口点进入您的应用。有些组件会依赖于其他组件。 共有四种不同的应用组件类型: Activity 服务 广播接收器 内容提供程序 每种类型都有不同的用途和生命周期,后者会

weixin_44064134的博客 1773

新买的USB无线网卡插上没反应?保姆级排查指南:从设备管理器到网络列表

本文提供USB无线网卡无法识别的全流程排查手册,涵盖硬件检测、驱动管理和网络配置三大维度。重点解析设备管理器中的设备状态诊断和驱动解决方案,特别适用于Realtek芯片的无线网卡(如RTL8188GU、RTL8812BU等),帮助用户快速解决网卡插上无反应的问题。

weixin_29876033的博客 502

从 0 到 1Android 自定义 View(三)画图的五个元素组件

Android.jpg 前言 迟来的第三篇,这篇还是知识点,不过没有细讲每个方法的运用等等,因为我个人觉得,API 方法是变的,且死记硬背效果不佳,当然能记住是好事,我们必需学会在编程中猜想和查找到对应的方法,所以这里提供的只是一些方法的概况,下一篇就是进行实践来完善这些知识点。 目录 从0到1Android自定义View(三) 画图的五个元素组件.png 一、画图五个元素组件简介 Android...

weixin_33722405的博客 103

出现 Tomcat:HTTP状态 404 - 未找到解决方法(图文分析)

出现如下问题 HTTP状态 404 - 未找到 类型 状态报告 消息 请求的资源[/ajax_war_exploded/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。 Apache Tomcat/8.5.69 解决方法如下: 网上中的操作有步操作多数都误导 这个部署的环境目录上面是web.xml 下面的目录路径是web即可不用到webapp 保存重启服务器即可使用 其他配置中启动tomcat的操作具体 JRE 1.8 ...

码农研究僧的博客 13万+

CATIA文件的网页预览方案

CATIA是工业设计中广泛使用的专业软件,产出`.CATPart`或 `.CATProduct`等文件类型,当资产数量较大时,我们希望快捷预览这些文件,就有了`CATPart`文件网页预览的需求 但我们知道,网页上无法直接渲染`CATPart`这种复杂的文件, CATIA生成的文件(如 `CATPart` 和 `CATProduct`)不仅包含三维几何信息(例如点、线和曲面),还涵盖了丰富的元数据与专业设计特征。 那有没有办法,能实现CATIA文件在网页上的便捷预览?

weixin_44211633的博客 1449

Android 自定义 View之画图的五个元素组件

目录(注:特别感谢原作者:来自简书的fuck两点水) 从0到1Android自定义View(三) 画图的五个元素组件.png 一、画图五个元素组件简介 Android Framework 提供了一些 2D 画图的 API,android.graphics 包就是其中之一。 通常我们在自定义 View 中需要画一些东西,那么基本就是需要 5 个元素组件协同来完成的。这 5 个组件分别是:

luanxuye的博客 658

【系统安全】Windows内核权限提升漏洞(CVE-2024-30088)

CVE-2024-30088是Windows内核提权漏洞,由越南安全研究员@Bùi Quang Hiếu详细分析。漏洞发生在AuthzBasepCopyoutInternalSecurityAttributes函数中,该函数在复制SecurityAttributesList时会使用用户提供的指针,在校验及复制期间存在时间差,导致存在TOCTOU漏洞。

李同學AI安全 1325

Android自定义View图片裁剪,支持自由裁剪、按自定义比例裁剪、圆形裁剪、旋转、镜面翻转,从0到1自定义View

Android自定义View图片裁剪,支持自由裁剪、按自定义比例裁剪、圆形裁剪、旋转、镜面翻转,从0到1自定义View,详细讲解,附上所有源码和Demo下载连接。

超级大帅哥 1911

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android基于Canvas,自定义View实现简单的画图工具

我们要实现的功能:1、点击相应的按钮,在图上画出相应的图形,并实时展现在画布上。2、橡皮檫功能,点击橡皮擦按钮,可以擦除画图上的图形。3、点击确定按钮可以停止当前的绘制。4、点击保存按钮可以把绘制的图形保存为jpg格式的图片文件。具体如下图:具体实现步骤:1、先自定义view,在view里实现各种画图的操作,代码如下:public class TestView extends View { ...

weixin_42058532的博客 697

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

安卓自定义view(全面)

安卓自定义view 一、view的测量 1.测量的模式: EXACTLY :精确值模式,当把空间的layout_width属性或者layout_height的属性设置为具体的数值时,或者指定为match_parent时候,系统就是使用的EXACTLY 模式; AT_MOST: 最大值模式,当空间的layout_width属性或者layout_height属性指定为wrap_content时候,控件大小跟着控件的内容变化而变化,此时控件的尺寸只要不超过父控件允许的最大尺寸即可。 UNSPECIFIED: 这

twenty_four_7的博客 3254

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

安卓View理解总结

安卓View理解总结 参考 link.网站写的一篇博客; 一.视图坐标系. View是Android所有控件的基类,同时ViewGroup也是继承自View,下面这张图可以直观了解。 1.Android坐标系. Android中有两种坐标系,分别为Android坐标系和视图坐标系,首先我们先来看看Android坐标系。 在Android中,将屏幕的左上角的顶点作为Android坐标系的原点,这个...

gzy19805026167的博客 2562

Android自定义View-自定义组件

Android自定义组件 android自定义组件一般有三种实现方式: 一、组合控件:组合控件,顾名思义就是将一些小的控件组合起来形成一个新的控件,这些小的控件多是系统自带的控件。 二、自绘控件: 何为自绘控件,就是完全用Paint和canvas画出来的,就是在onDraw()方法里面绘画,在onMeasure()方法里面进行测量,如果是容器在onLayout()方法中定位每个子组件。 三、继...

five-lei的博客 4794

Android自定义View之View的位置参数

最近在学习自定义View,总是被View的显示的位置搞的一头雾水。对于一个View的位置,我比较迷惑: View在显示在哪个位置? View的宽和高的定义? 什么是ViewView是Android中所有控件的基类,不管是Button或者TextView,还是LinearLayout或者ViewGroup,都继承于View。所以说,View是用户界面最基本的控件,用于创建交互式UI组件。ViewGro

行云间 7555

重学Android:自定义View基础(一)

作为一名安卓开发,也被称为大前端,做一个美观的界面,是我们必备的基础技能,可能在开发中我们最常用的是系统自带的View,因为他能满足绝大部分需求,难一点的我们也可以上Github上找个三方库使用,少数情况下会让我们进行自定义View,当然这不代表着我们可以不去掌握其原理,因为它是通往中高级程序员的必经之路,也是大厂面试的热门知识,只有熟练掌握其核心原理,才能让我们在后续的开发中游刃有余。

WriteBug001的博客 1292

Android自定义组件:1、什么是自定义组件、自定义组件的方式、定义自定义属性

一、什么是自定义组件 Android为我们提供了丰富的 UI组件,基本的应用已经足够了,但在实际开发中,如果我们想构建更加复杂的 UI视图,此时就需要使用自定义组件了。 二、自定义组件的方式 自定义组件的三种方式: 1、组合现有组件 组合现有Android默认提供的组件,继承ViewGroup或其子Layout类等布局类进行组合。 2、在某一个组件上进行扩展 调整现有Android默......

鲁迷那的专栏—坚持实践后再写出来! 2569
上一篇: Fiddler抓取数据并分析(完整的配置教程)
下一篇: 【微小说】理想
Two_Water
博客等级 码龄12年 573粉丝 134原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值