【Android学习笔记】图形与图像处理(动态处理)

Android studio之图形与图像处理 其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。 阅读详情

逐帧动画

  • AnimationDrawable与逐帧动画。在元素中定义子元素,表示动画的全部帧,并制定持续时间即可。

<animation-list xmlns:android="“android:onshot=true/false> <item
android:drawable=”@package_name:drawable/resource_name"android:duration=“integer”/>
</animation-list>

补间动画

  • android使用Animation代表抽象的动画类

    • AlphaAnimation:透明度改变的动画,指定开始透明度、结束透明度、动画持续时间

    • ScaleAnimation:大小缩放的动画,指定缩放中心、开始缩放比、结束缩放比、动画持续时间

    • TranslateAnimation:位移变化的动画,指定开始位置、结束位置、动画持续时间

    • RotateAnimation:旋转动画,旋转轴心、开始旋转角度、结束旋转角度

    • 通过interpolator指定动画运行期间,动态补入多少帧,在哪些时刻补入。能够指定动画的变化速度。

  • interpolator的实现类

    • LinearInterpolator:均匀速度改变

    • AccelerateInterpolator:加速

    • AccelerateDecelerateinterpolator:中间加速

    • CycleInterpolator:循环播放n次,变化速度正玄曲线

    • DecelerateInterpolator:减速

  • 自定义补间动画

    • 继承Animation,重写抽象基类的interpolatedTime时间进行比方法和Transformation补间动画变形程度。

    • Transformation代表了对图片或者视图的变形程度,封装了一个Matrix对象用来对图形进行位移、倾斜、旋转等变换。封装了一个Camera对象,进行三维空间变换。getMatrix():将Camera所有变换应用到matrix上

    • getMatrix():Camera对应变换应用到matrix上

    • rotateX():X轴旋转

    • rotateY():Y轴旋转

    • rotateZ():Z轴旋转

    • translate():目标组件在三维空间内变换

    • applyToCanvas():应用到场景当中

属性动画

  • 属性变化可以定义任意性质的变化。可以针对任何对象执行的动画,需要制定动画持续时间、动画的插值方式、动画的重复次数、重复行为、动画集、帧刷新率

  • 属性动画的API

    • Animator:提供了创建属性动画的基类。

    • ValueAnimator:属性动画主要的时间引擎,负责计算各个帧的属性值,定义了属性动画的绝大部分核心功能。

    • ObjectAnimator:对指定对象的属性执行动画,是ValueAnimator的子类

    • AnimatorSet:组合多个Animator,并制定多个Animator的播放次序。

    • IntEvaluator:计算int属性值的计算器。

    • FloatEvaluator:计算float类型的计算器

    • ArgbEvaluator:计算十六进制颜色值的计算器

    • TypeEvaluator:计算器接口。自定义计算器。

  • ValueAnimator创建属性动画的步骤:

    1. 调用ofInt() ofFloat() ofObject()静态方法创建ValueAnimator实例

    2. 调用setXxx() 方法设置动画持续时间,差值方式、重复次数

    3. 调用start()方法启动动画

    4. 为ValueAnimator注册AnimatorUpdateListener监听器,监听ValueAnimator计算出来的值,并将这些值应用到制定对象上。通过getAnimatorValue()方法来计算值,并应用到任何对象上。

  • ObjectAnimator创建属性动画的步骤

    • 继承了ValueAnimator,已经绑定了指定的对象,直接将ValueAnimator计算的值应用到制定对象的指定属性上。

    • 必须为绑定的制定对象提供特定的setter方法才行。如果没有开始值,必须提供getter方法提供开始值。

    • 如果对象是View需要调用onAnimationUpdate()中调用View.invalidate()方法来刷新屏幕显示。

使用SurfaceView实现动画

  • SurfaceView与SurfaceHolder相互关联使用,后者提供了方法:

    • lockCanvas()锁定surfaceView对象,或者对指定区域更新。
Android studio之图形与图像处理,一线互联网移动架构师NDK模块开发 / 改变ImageView显示的图片// ②});在为我们的应用界面添砖加瓦的过程中,除了可以使用已有的图片外,Android应用还经常需要在运行过程中动态的生成图片,而这样就需要借助于Android的绘图支持了。Android的绘图与Swing中的绘图思路类似即开发一个自定义类,然后让该类继承JPanel,之后重写其中的paint(Graphics g)方法即可。 阅读详情

相关推荐

Android studio之图形与图像处理,android高级面试题2020

Overridetry// 获取目录下所有文件(assets下)// 为next按钮绑定事件监听器,该监听器将会查看下一张图片@Override// 找到下一个图片文件while (!&&!&&!// 改变ImageView显示的图片// ②});

2401_84152991的博客 1054

图形与图像处理

Andriod图形和图像处理前语:决定Android应用是否被用户接受的重要方面就是用户界面。为了提供友好的用户界面,就需要在应用中使用图片了。Android系统提供了ImageView显示普通静态图片,也提供了AnimationDrawable来开发逐帧动画,还可通过Animation对普通图片使用补间动画。图形、图像处理不仅对Android系统的应用界面非常重要,而且Android系统上益智类游

fjnu_se的博客 286

Android studio之图形与图像处理(1)

考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**[外链图片转存中…(img-Z98ovuXH-1712512002481)][外链图片转存中…(img-tACuII9E-1712512002482)][外链图片转存中…(img-DNPZVQPY-1712512002482)]

2301_77595001的博客 480

Android 高级图形图像处理

绘制矩形、扇形、圆角矩形 // activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" and...

W_L_B的博客 808

QML在Android上的摄像头应用与图像处理实践

htmltable {th, td {th {pre {简介:QML提供了一种简洁的方式来设计动态图形用户界面,特别是可以利用Camera组件来控制Android设备的摄像头。开发者可以通过QML的Camera组件实现基本的拍照和录像功能,并通过使用Transform组件解决图像显示问题,如图像反转。此外,QML还支持多种摄像头操作,如切换摄像头、调整分辨率等,并且可以通过阅读包含的示例代码进一步理解这些操作的实现细节。

weixin_35728286的博客 614

手把手教你用vivado2018.3为复旦微JFMQL15T打IP补丁(含环境变量配置技巧)

本文详细介绍了在Vivado 2018.3环境中为复旦微JFMQL15T开发板打IP补丁的全流程,包括环境变量配置、IP缓存管理等关键步骤。通过实战验证的解决方案,帮助工程师快速搭建开发环境,解决国产芯片开发中的常见问题,提升开发效率。

weixin_30374009的博客 725

Termux图像处理:图片编辑和图形操作完全指南

你是否曾在外出时遇到需要紧急处理图片的情况?设计师需要快速调整素材尺寸,开发者需要生成应用图标,学生需要为报告裁剪图表——这些场景下,传统解决方案往往依赖笨重的桌面软件或功能受限的手机App。而**Termux(终端模拟器)** 结合Linux图像处理工具,正在重新定义移动设备的图像编辑能力。 本文将系统讲解如何在Android设备上通过Termux构建完整的图像处理工作流,涵盖从环境搭建到高级...

gitblog_00721的博客 1484

STM32F103C8T6实战:手把手教你搭建智能火灾报警系统(附MQ-2传感器调试技巧)

本文详细介绍了基于STM32F103C8T6单片机和MQ-2烟雾传感器的智能火灾报警系统搭建过程。从硬件选型、电路设计到软件开发,提供全面的实战指导,特别包含MQ-2传感器调试技巧,帮助开发者快速实现稳定可靠的智能火灾监控系统。

year5的博客 213

Android学习16--图形与图像处理

Android系统提供了ImageView显示普通静态图片,也提供了AnimationDrawable来开发逐帧动画,还可通过Animation对普通图片使用补间动画。图形、图像处理不仅对Android系统的应用界面非常重要,而且Android系统上益智类游戏、2D游戏都需要大量的图形、图像处理。 1、使用简单图片 图片不仅可以使用ImageView来显示,也可以作为Button、wi

lixj517990544的专栏 3756

Aspice的理解

ASPICE 是由汽车行业的主要公司和组织合作开发的,包括德国汽车工业联合会(VDA)和国际汽车工作组(Automotive SIG)。其目标是通过标准化的软件开发流程,提高汽车电子系统的软件质量和可靠性。

hkj8808的博客 2015

射频指纹识别技术:原理、应用与深度学习实现

射频指纹识别(RFFI)是一种基于硬件特征的设备身份认证技术,通过分析无线设备发射信号中的独特硬件特征实现设备识别。其核心原理源于发射器硬件电路的非线性特性,如功率放大器的相位噪声和混频器的非线性失真,这些特征具有难以伪造的特点。在物联网和边缘计算场景中,RFFI技术展现出独特优势,尤其在智能家居和工业物联网中,能有效防止非法接入和设备伪造。深度学习方法的引入进一步提升了RFFI的性能,通过自动特征提取和端到端优化,显著提高了识别准确率。本文详细探讨了RFFI的技术原理、应用场景及实现方法,为相关领域的研究

weixin_30457465的博客 890

安卓之图形绘制的应用场景以及各种技术优劣分析

安卓系统作为全球最流行的移动操作系统之一,其图形绘制功能在各种应用场景中发挥着重要作用。无论是创意绘图、教育应用、游戏开发还是虚拟现实,图形绘制都是关键的一环。本文将深入探讨安卓图形绘制的应用场景,并分析各种技术的优劣,同时附上相关代码示例。

wlred1980的博客 1853

STM32进入HardFault_Handler时,如何找到问题所在?

当STM32进入HardFault_Handler时,定位问题发生的点

m0_60831979的博客 2150

Android图像处理之图形特效处理

一、Android变形矩阵——Matricx: 跟Android图像的色彩处理基本一样,只是将ColorMatrix换成了Matrix,ColorMatrix是4*5的矩阵,Matrix是3*3的。每个像素点表达了其坐标的X、Y信息: 当使用变换矩阵去处理每一个像素点的时候,与颜色矩阵的矩阵乘法一样,计算公式如下所示: 通常情况下,会让g=h=0,i=1,这样就使1=g...

ddf1463的博客 191

西门子200SMART PID温控实战:从配置到避坑(附加热棒控制案例)

本文详细介绍了西门子200SMART PLC在PID温控系统中的实战应用,涵盖硬件配置、PID参数整定及工程避坑技巧。通过加热棒控制案例,重点解析了信号处理、固态继电器选型、断电保持和无扰切换等关键问题,为工业自动化领域的温度控制提供可靠解决方案。

weixin_28727975的博客 356

用扩展点为 Fiori Elements 添加自定义动作:从原理到落地的完整实践

本文介绍了如何在基于OData V4的Fiori Elements应用中通过Extension Points添加自定义Action按钮。主要内容包括: 扩展点动作与标准注解动作的区别:扩展点用于非标准前端流程、组合操作等场景,需通过extensionAPI与框架交互。 扩展点动作的插入位置:可放置在List Report表格工具栏、Object Page页眉/页脚/Section工具栏等位置,并说明了相应的manifest.json配置节点。 配置模型与处理函数契约:详细说明了press、visible/e

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 250

Sharp 终极指南:10分钟掌握 Android SVG 图像处理

在现代移动应用开发中,矢量图形处理已成为提升用户体验的关键技术。Sharp 作为 Android 平台上的高效 SVG 图像处理库,为开发者提供了一套完整的矢量图形解决方案。无论你是要加载复杂矢量图标,还是实现动态图形效果,Sharp 都能让你的应用脱颖而出。 ## 🔥 核心优势 ✨ **高性能矢量渲染** - Sharp 基于优化的 SVG 解析引擎,能够快速加载和渲染复杂矢量图形,同时保

gitblog_00998的博客 553

windows 10 等保3级配置核查与加固(附自动化加固脚本)

关闭注册表编辑器,然后重新启动计算机。\\r\\n 对于OPC通讯站(server\\\\client),【密码最长存留期】需要设置为0,即密码不过期。‌445端口‌:修改注册表禁用。打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\\\\计算机配置\\\\Windows设置\\\\安全设置\\\\本地策略\\\\安全选项”,在右边窗格中找到“Microsoft网络客户端:将未加密的密码发送到第三方SMB服务器”,双击,配置为“已禁用”,确定。

悦分享 160

Android studio之图形与图像处理,flutter下拉选择

import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import java.io.IOException; import java.io.InputStream; public class MainActivity extends Activity

m0_66145060的博客 310

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【亲测免费】 探索 Android 图像处理新境界:Android Image Kitchen

探索 Android 图像处理新境界:Android Image Kitchen 在快速发展的移动应用世界中,图像处理能力已经成为一个应用程序必不可少的功能之一。 是一个开源的 Android 库,专为开发者打造,旨在简化和优化应用中的图像处理任务。 项目简介 Android Image Kitchen 提供了一系列强大的工具,可以轻松地进行图像裁剪、缩放、旋转、滤镜效果添加等操作。这个库不仅性...

gitblog_00051的博客 1207

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

具身智能 2026:启元人形机器人开发者生态的“安卓时刻”来了吗

一个贯穿全文的问题:人形机器人开发者生态,是否正从「封闭垂直」走向「开源平台化」?本文以开源底座的公开数据为标尺,盘点 SDK、URDF、仿真与技能分发的开放程度,并落回启元机器人的开源路径。所有关键数据均标注来源,文末附社区与学堂链接。

在北风吹起的时候加入我们的队伍 在秋雨到来的时候成为彼此的温暖 754

温度PID控制PLC程序

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

上一篇: 【Android学习笔记】事件处理
下一篇: 【Android学习笔记】图形与图像处理(静态处理)
onnx
博客等级 码龄5年 1万+粉丝 416原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onnx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值