Android事件分发与消费

[Linux]双网卡 CentOS 系统中指定网络请求走特定网卡的配置方法 本文详细介绍了在双网卡CentOS系统中指定特定域名/IP通过指定网卡传输流量的方法。核心步骤包括:1)确认网卡信息(ip addr)和域名IP解析(nslookup);2)添加临时路由(ip route add);3)持久化配置(创建route-eth1文件);4)验证配置(ip route show和curl测试)。文章还提供了网关查询、路由删除等常见问题的解决方法,并区分了不同CentOS版本重启网络服务的命令差异。通过合理配置路由规则,可实现流量的定向传输需求。 阅读详情

关于andorid的事件分发和消费,之前在网上看了好多博客,当时觉得看明白了,事后遇到时又会变的有点模糊,为了巩固知识,那就写一篇博客来记录下吧。

一般Android的事件有抽象的键盘或触摸屏,还有鼠标的吧,不过鼠标这个我倒没研究过,只是在网上又看到过博客,关于键盘的分发和响应事件我想对于android tv的的比较多吧,触屏一般都是手机或pad,就拿touch来说,在tv上的keyEvent事件类似,先上张图

从图中可以看出,Android中不同的控件所具有的事件分发、拦截和响应稍有不同,主要表现在Activity本身不具有事件拦截,不是ViewGroup的最小view单元不具有事件分发和

事件拦截(因为它没有自己的子View)。所以他只能消费。

 

 

事件分发:public boolean dispatchTouchEvent(MotionEvent ev):最上层先捕获、分发、拦截,依次向下传递 注意:向下分发时亦可以消费。 

       当监听到触摸事件后,由Activity首先捕获到,重写此方法后,进行事件分发处理过程,我们可以发现,当返回值为true时,表示该事件在本层不再进行分发且已经在事件分

发自身中被消费了。至此,事件已经完结。这样Activity其他控件将不再响应触摸事件。当返回值为false时,表明事件在本层不再继续进行分发,并交由上层控件的

onTouchEvent方法进行消费。如果返回默认的方法super.dispatchTouchEvent(ev);将会把触摸事件传递给系统默认方法(即拦截事件)处理,这是会执行

onInterceptTouchEvent(MotionEvent ev)处理,由于Activtiy不具有事件拦截的方法将会直接传递给子View或Viewgroud的事件分发处理。 他们的分发和Activy一本一致,唯一不

同的就是在拦截的时候。

 

 

事件拦截:public boolean onInterceptTouchEvent(MotionEvent ev)

如果 onInterceptTouchEvent 返回 true,则表示将事件进行拦截,并将拦截到的事件交由本层控件 的 onTouchEvent 进行处理;

如果返回结果是false;则表示不对事件进行拦截,事件得以成功分发到子View。并由子View的dispatchTouchEvent进行处理。

如果返回super.onInterceptTouchEvent(ev),事件默认不会被拦截,交由子View的dispatchTouchEvent进行处理。

 

 

事件响应:public boolean onTouchEvent(MotionEvent ev):事件响应是由下向上的过程

如果事件分发传递到最下层控件里,将会执行最下层控件的此方法,如果处理后返回true,表示该控件消费了此事件,将不再向上传递。如果处理后返回为false,将会继续向上

层传递。让上层的view的此方法来处理。默认的返回值为false。同样的你也可以把此事件传递给手势,让手势来进行处理。至于手势的一些处理,我准备在写一篇博客来记录

一下。路漫漫其修远兮,吾将上下而求索。

 

 总结:1.在事件分发时,无论返回false还是true,都不会交给拦截事件处理,只有返回默认的方法才行。

             2.事件消费时,如果成功通过了上层的拦截的审核,才会通过冒泡向上执行,如果上层直接拦截,当由上层的事件消费。

 

 

 

 

 

华为OD机考双机位C卷 - 构成正方形的数量 (Java & Python& JS & C/C++ & GO ) 华为OD机考双机位C卷 - 成正方形的数量 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。 阅读详情

相关推荐

实战案例:用多智能体系统模拟房地产市场的架构设计

房地产市场是典型的复杂自适应系统:买方纠结“要不要上车”、卖方盘算“挂多少钱能快速成交”、中介忙着“撮合两边赚佣金”、政府琢磨“怎么调政策稳房价”——每一个参与者的微小决策,最终都会汇聚成“房价暴涨”“成交冰点”这样的宏观现象。传统的计量经济学模型(比如线性回归)假设“所有人都是理性人”,但现实中没人能算清所有变量——你可能因为“同事买了学区房”就跟风,也可能因为“怕失业”而放弃买房。这时候,多智能体系统(MAS)

移动开发前沿的博客 1123

图解 Android 事件分发机制

转载: 图解 Android 事件分发机制 在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要。 A

wxx614817的专栏 1203

使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集

使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集

XAX520_1314的博客 2490

【Android】事件传递:向下拦截,向上处理

tuhuolong的专栏 2838

WindTerm 安装使用教程

WindTerm是一款Github上开源的 SSH 终端工具,它是完全可以比肩MobaXterm工具的。

m0_69576880的博客 4031

毫米波雷达入门知识

毫米波雷达入门知识

ssbzxcvbnm1234567的博客 5446

Android Touch事件分发和消费机制

概述Touch事件分发和消费机制是指用户用手操作手机屏幕时所造成的事件触发,最基本的包括以下四种: - 按下Down - 移动Move - 取消Cancel - 离开触摸屏Up 一个完整的Touch过程一般是由Down->(Move)->Up/Cancel这四个事件组成,值得注意的是,一个完整的触摸事件必须由Down开始,再到Up/Cancel结束,中间的Move可以有可以没有。 Tou

Retr0的博客 736

基于 STM32 的校园电动车充电桩智能计费与过载保护系统设计与实现

本系统基于 STM32F103 主控,通过 HLW8032 电能计量芯片实现精准计费,配合继电器实现过载保护,RC522 模块完成刷卡身份识别,整体方案成本低、可靠性高,适合校园电动车集中充电场景的批量部署。软件采用状态机设计,逻辑清晰,可扩展多路充电口、远程监控等功能。

weixin_42300449的博客 58

Android什么叫消费事件,Android View事件分发和消费源码简单理解

Android View事件分发和消费源码简单理解前言:开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白。中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开的感觉。很重要的学习方法:化繁为简,只抓重点。源码一坨,不要指望每一行代码都看懂。首先是没必要,其次大量非关键代码会让你模糊真正重要的部分。以下也只是学姐的学习成果,各位同学要想理解深刻,还需要自己亲自去...

weixin_39628063的博客 317

PyTorch实战(7)——循环神经网络

本节介绍了循环神经网络 (RNN) 及其在序列数据处理中的应用。首先对比了卷积神经网络 (CNN) 与 RNN 的差异,指出 RNN 通过循环连接建模时序依赖关系。随后详细梳理了 RNN 的发展历程,包括基础 RNN、双向 RNN、LSTM、GRU 等变体的结构特点及改进动机,其中 LSTM 通过门控机制解决长程依赖问题,GRU 则进一步简化结构。接着通过 IMDb 情感分析实战,演示了如何使用 PyTorch 实现文本预处理、RNN 模型构建及训练评估流程,最后探讨了注意力机制如何提升 RNN 性能。

盼小辉丶的博客 1万+

YOLOv11的QAT(训练感知量化)实战

本文总结了YOLO模型量化感知训练(QAT)的实践要点:QAT通过模拟量化噪声训练模型,比训练后量化(PTQ)更适合密集预测任务。关键实现包括:1)配置对称/非对称量化器;2)排除检测头量化;3)调整学习率策略并添加量化正则;4)选择困难样本校准;5)转换前稳定BN统计量。调试时需检查量化范围、数值分布和逐层突变,并注意SPP等敏感层。建议小模型使用QAT,大模型可能适得其反,且TensorRT的FP16模式可能优于INT8-QAT。量化应以功能正确为前提,避免过度优化。

as1225120794的博客 510

android 点击事件消费,Android View事件分发和消费源码简单理解

Android View事件分发和消费源码简单理解前言:开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白。中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开的感觉。很重要的学习方法:化繁为简,只抓重点。源码一坨,不要指望每一行代码都看懂。首先是没必要,其次大量非关键代码会让你模糊真正重要的部分。以下也只是学姐的学习成果,各位同学要想理解深刻,还需要自己亲自去...

weixin_34471637的博客 461

openharmony之UniProton内核技术揭秘:鸿蒙面向工业控制领域的RTOS设计之道

UniProton是鸿蒙操作系统面向工业控制领域的轻量级实时操作系统(RTOS),专为资源受限的嵌入式设备设计。作为鸿蒙生态的重要组成部分,UniProton提供了高效的实时任务调度、内存管理和IPC机制,满足工业控制场景对实时性和可靠性的严格要求。想象一下,UniProton就像一个超级聪明的管家,管理着电子设备里所有的工作。让你的智能手表既能显示时间,又能接收消息让家里的扫地机器人既能避开障碍物,又能记住哪里已经打扫过了让工厂里的机器人手臂既能精确地抓取东西,又能快速地完成任务实时性强。

m0_67505153的博客 883

Android里的onTouch事件的分发与消费

简单讲述:Android里的onTouch事件的分发与消费初学Android将近一年的时间了,由于一开始就是工作性学习(没有系统的学习)。所以一般接触最多的就是组件的使用,而自己在接触比复杂的组件或者Android其他相关知识的时候总是感觉比较吃力,嗯,就是比较吃力,想要研究研究却不知道从哪里下手,现在想写一些基础的东西来系统的了解一下Android。在看到Android的窗口管理机制当中的一些知识

stven_king的专栏 1518

深度学习工具包 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")

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 事件的分发和消费机制

一、简介 :   Activity或View类的onTouchEvent()回调函数会接收到touch事件。 一个完整的手势是从ACTION_DOWN开始,到ACTION_UP结束。 简单的情况下,我们只需要在onTouchEvent()中写个switch case语句,处理各种事件(Touch Down、 Touch Move、 Touch Up等),但是比较复杂的动作就需要更多的处理了。 ViewGroup作为一个parent是可以截获传向它的child的touch事件的。 如果一个ViewGroup

yanhuomatou2015的博客 521

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

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

Android事件的分发、拦截、消费机制简单的流程

事件的分发、消费机制在Activity,ViewGroup,View中进行实现,其中ViewGroup中多了一个事件拦截机制其实现方法如图: Touch事件三种方法的理解: /** * 1.事件分发 * 返回系统默认情况下,以隧道形式 从根元素一次向下传递 * 返回 true 表示触摸事件已经被消费掉了 将不在向下分发 * 返回 false

小夜的博客 490

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

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

Android 之事件的分发和消费机制

Android 编程下 Touch 事件的分发和消费机制 Android事件机制之一:事件传递和消费

鲁鲁晓生 658

android中的事件分发与消费机制简答介绍

在android中,事件的分发与消费存在三个方面,首先是activity与view中,里面有dispathchTouchEvent 事件的分发与onTouchEvent 消费事件,但是没有拦截事件onInterpetonTouchEvent方法,但是在viewgroup里面,这个三个方法都是有作用的.用案例解释:   首先我们在activity与textview,viewgroup里面重写他们各自

muyantingfeng的博客 235

android 事件冒泡,Android事件分发与消费机制

一、Touch 事件分析:事件分发:dispatchTouchEventreturn true:事件会分发给当前 View 并由 dispatchTouchEvent 方法进行消费,同时事件停止向下传递;return false:返回给 上一级的onTouchEvent 进行消费;returnsuper.dispatchTouchEvent(ev):事件会自动的分发给当前 View 的 onInt...

weixin_31582099的博客 310

Android里Touch 事件的分发和消费机制

今天偶然看到一篇关于Touch事件的分发和消费机制的文章,感觉写得很彻底很清晰,转发过来给大家分享下 Android 编程下 Touch 事件的分发和消费机制 以下是我根据上面文章自己画的一个大概的流程草图,请指点…

沉疯的博客 439

《Android UI》1分钟弄懂Touch事件的分发与消费机制

一生征战何人陪,谁是谁非谁相随1分钟弄懂Touch事件的分发与消费机制 前几个月看了网上别人写的touch分发事件,废话一大堆,乱七八糟. 我的文章以简单明了为主,剩下的原理就交给你们了,因为会用了,分&gt;析起来那就是简单的事了 在自定义UI中遇到过继承布局的、继承组件的、继承View、继承ViewGroup的。都用过触摸事件onTouchEvent吧。今天来讲解 Touch事件分发与消费机

学编程找莫离,莫离老师更懂你! 721

Android手势与触摸事件的分发和消费机制

Android手势与触摸事件的分发和消费机制 在Android 客户端开发过程中,经常会遇到手势事件的处理,本篇博文讲一下本人对touch事件处理机制的一些理解,希望对一些同志们有所帮助。 我们知道Android的视图是树形结构,如下图所示为例: 由于PhoneWindow和DecorView我们平时是不会有改动的,也用不到,所以我们只关注能用到的三个类:Activity、View...

海纳百川Android的博客 2566

android 事件的分发和消费机制

android 中可以相应事件的类有 Activity ViewGroup View这三类。 事件的分发顺序为由上到下 会依次调用 。中间可被打断 即 ViewGroup的 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { Log.e(TAG,"onInterceptTouchEvent"); //

tintick的专栏 374

安卓事件分发机制、拦截和消费机制的总结

▐ 事件分发:public boolean dispatchTouchEvent(MotionEvent ev)Touch 事件发生时 Activity 的 dispatchTouchEvent(MotionEvent ev) 方法会以隧道方式(从根元素依次往下传递直到最内层子元素或在中间某一元素中由于某一条件停止传递)将事件传递给最外层 View 的 dispatchTouchEvent(Mot...

zhang1223665986的博客 239
上一篇: 关于ADB(android debug bridge)一些操作
下一篇: Android四大组件——Activity的生命周期
android_seven
博客等级 码龄11年 8粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值