android.graphics包中的一些类的使用

Region:表示一块区域  
和Rect不同的是,它表示的是一个不规则的样子,可以是椭圆、多边形等等,而Rect仅仅是矩形。 
Java代码   icon_star.jpg 

  • Region region = new Region();  
  • region.isEmpty();  
  •   
  • // width: 100, height: 50的矩形  
  • region.set(100, 100, 200, 150);  
  • Rect bounds = region.getBounds();  
  •   
  • // 矩形区域是否在其内部  
  • boolean contains = region.quickContains(120, 120, 170, 150);  
  •   
  • // 矩形区域是否不在其内部  
  • boolean reject = region.quickReject(0, 0, 50, 50);  
  •   
  • // INTERSECT 取两者交集  
  • Region r2 = new Region(region);  
  • r2.op(0, 0, 150, 120, Region.Op.INTERSECT);  
  •   
  • // DIFFERENCE 第一次不同于第二次的部分显示出来  
  • r2 = new Region(region);  
  • r2.op(0, 0, 150, 120, Region.Op.DIFFERENCE);  
  •   
  • // REPLACE 显示第二次的  
  • r2 = new Region(region);  
  • r2.op(0, 0, 150, 120, Region.Op.REPLACE);  
  •   
  • // REVERSE_DIFFERENCE 第二次不同于第一次的部分显示  
  • r2 = new Region(region);  
  • r2.op(0, 0, 150, 120, Region.Op.REVERSE_DIFFERENCE);  
  •   
  • // UNION 取全集  
  • r2 = new Region(region);  
  • r2.op(0, 0, 150, 120, Region.Op.UNION);  
  •   
  • // XOR 补集,就是全集的减去交集的剩余部分显示  
  • r2 = new Region(region);  
  • r2.op(0, 0, 150, 120, Region.Op.XOR);  


示意图  
5c2f673e-3029-341d-b70d-0b2bc6ac72e9.jpg 


Path  
path可以看作是一个点集,将它内部的点集按顺序连接起来时可以组成任意边型。一般多边形就是用Path来画。 
Java代码   icon_star.jpg 

  • // 公共代码  
  • Path pathToDraw = new Path();  
  • // 移到某点处作为起点  
  • pathToDraw.moveTo(50, 50);  
  • pathToDraw.lineTo(100, 50);  
  • pathToDraw.lineTo(150, 100);  
  • pathToDraw.lineTo(50, 100);  
  •   
  • // 多边形  
  • pathToDraw.lineTo(100, 75);  
  • pathToDraw.close();  
  •   
  • // 不闭合,逆时针  
  • pathToDraw.addCircle(50, 100, 30, Path.Direction.CCW);  
  • // 不闭合,顺时针  
  • pathToDraw.addCircle(50, 100, 30, Path.Direction.CW);  
  • // 闭合,逆时针  
  • pathToDraw.addCircle(50, 100, 30, Path.Direction.CCW);  
  • pathToDraw.close();  
  • // 闭合,逆时针  
  • pathToDraw.addCircle(50, 100, 30, Path.Direction.CW);  
  • pathToDraw.close();  
  • // 上面四个画出来是一样的  
  •   
  • // 添加弧线,弧线是由矩形来控制的,正方形时是圆弧,矩形时就是椭圆弧了  
  • pathToDraw.addArc(new RectF(25, 75, 55, 155), 0, 270);  
  •   
  • // 在最后一个点处添加弧线,如果rectf中指定的点与最后一个点不同,则首先会将其先lineTo最后一个点(图中可以看到,与上面的代码所画的图的区别就是多了个连接线段)  
  • pathToDraw.arcTo(new RectF(25, 75, 55, 155), 0, 270);  
  •   
  • // 添加二次曲线,两个控制点(25, 125), (75, 175)  
  • pathToDraw.cubicTo(25, 125, 75, 175, 30, 200);  
  •   
  • // 添加三次曲线,三个控制点(25, 125), (75, 175), (30, 200)  
  • pathToDraw.cubicTo(25, 125, 75, 175, 30, 200);  


Path.FillType路劲的填充类型还不是很理解,主要是文档没有对其做任何解释,api demo只有代码,也不懂啥意思。网上找了也没有解释的很清楚的。可以看下这个连接: http://www.imobilebbs.com/wordpress/?p=1589  
51dd5215-d0a2-3ae8-b4e2-f5ad7d336e5a.jpg 


Bitmap  
Bitmap的density参数的使用 
Java代码   icon_star.jpg 

  • // 将完整的图片绘制到(0, 0)处  
  • canvas.drawBitmap(mBmp, 0, 0, null);  
  •   
  • // 240(hdpi)的图片放到160上时,就会变小1.5倍  
  • mBmp.setDensity(240);  
  • // 将完整的图片绘制到(100, 0)处  
  • canvas.drawBitmap(mBmp, 100, 0, null);  
  •   
  • // 将完整的源图片绘制到起点为(0, 100),宽100、高100的矩形范围内  
  • canvas.drawBitmap(mBmp, null, new Rect(0, 100, 100, 200), null);  
  •   
  • // 将源图片的(0, 0)开始宽100、高100部分绘制到起点为(100, 100)宽100, 高50的矩形范围内  
  • canvas.drawBitmap(mBmp, new Rect(0, 0, 100, 50), new Rect(100, 100, 200, 150), null);  
  •   
  • // 将源图片的(0, 0)开始宽100、高100部分绘制到起点为(200, 100)宽50, 25的矩形范围内  
  • canvas.drawBitmap(mBmp, new Rect(0, 0, 100, 50), new Rect(200, 100, 250, 125), null);  


效果: 
e331abc9-0496-33ea-8cfa-1e2d276465be.jpg 
最终得出的结论:bitmap.setDensity并不影响源图片,只是在绘制的时候,canvas会根据该density对图片进行缩放绘制。 


Paint介绍  
Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, 
样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法, 
大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。 
Text代码   icon_star.jpg 

  •    
  • 1.图形绘制   
  • setARGB(int a,int r,int g,int b);   
  • 设置绘制的颜色,a代表透明度,r,g,b代表颜色值。   
  •    
  • setAlpha(int a);   
  • 设置绘制图形的透明度。   
  •    
  • setColor(int color);   
  • 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。   
  •    
  • setAntiAlias(boolean aa);   
  • 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。   
  •    
  • setDither(boolean dither);   
  • 设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰   
  •    
  • setFilterBitmap(boolean filter);   
  • 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示   
  • 速度,本设置项依赖于dither和xfermode的设置   
  •    
  • setMaskFilter(MaskFilter maskfilter);   
  • 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等   
  •    
  • setColorFilter(ColorFilter colorfilter);   
  • 设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果   
  •    
  • setPathEffect(PathEffect effect);   
  • 设置绘制路径的效果,如点画线等   
  •    
  • setShader(Shader shader);   
  • 设置图像效果,使用Shader可以绘制出各种渐变效果   
  •    
  • setShadowLayer(float radius ,float dx,float dy,int color);   
  • 在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色   
  •    
  • setStyle(Paint.Style style);   
  • 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE   
  •    
  • setStrokeCap(Paint.Cap cap);   
  • 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式   
  • Cap.ROUND,或方形样式Cap.SQUARE   
  •    
  • setSrokeJoin(Paint.Join join);   
  • 设置绘制时各图形的结合方式,如平滑效果等   
  •    
  • setStrokeWidth(float width);   
  • 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度   
  •    
  • setXfermode(Xfermode xfermode);   
  • 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果   
  •    
  • 2.文本绘制   
  • setFakeBoldText(boolean fakeBoldText);   
  • 模拟实现粗体文字,设置在小字体上效果会非常差   
  •    
  • setSubpixelText(boolean subpixelText);   
  • 设置该项为true,将有助于文本在LCD屏幕上的显示效果   
  •    
  • setTextAlign(Paint.Align align);   
  • 设置绘制文字的对齐方向   
  •    
  • setTextScaleX(float scaleX);   
  • 设置绘制文字x轴的缩放比例,可以实现文字的拉伸的效果   
  •    
  • setTextSize(float textSize);   
  • 设置绘制文字的字号大小   
  •    
  • setTextSkewX(float skewX);   
  • 设置斜体文字,skewX为倾斜弧度   
  •    
  • setTypeface(Typeface typeface);   
  • 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等   
  •    
  • setUnderlineText(boolean underlineText);   
  • 设置带有下划线的文字效果   
  •    
  • setStrikeThruText(boolean strikeThruText);   
  • 设置带有删除线的效果   



Paint类涉及的几个枚举:(从msdn抄过来的,msdn的文档果然比android文档详细n倍:http://msdn.microsoft.com/en-us/library/cc294944.aspx) 
Paint.Cap 如何结束笔触的枚举 
7748eded-4c36-36bf-bdf7-60a8ef396c50.jpg 

Paint.Join path的拐角处如何绘制 
75108c52-718d-3a4c-a392-5087547ca850.jpg 


Canvas的基本使用  
抗锯齿相关参考: http://www.iteye.com/topic/794505  
填充颜色,一般清屏时会用这里的方法 
Java代码   icon_star.jpg 

  • switch (keyUpCount) {  
  • case 0:  
  •     canvas.drawARGB(100, 255, 0, 0);  
  •     break;  
  •   
  • case 1:  
  •     canvas.drawColor(Color.argb(100, 0, 255, 0));  
  •     break;  
  •   
  • case 2:  
  •     // 指定PorterDuff mode方式绘制颜色  
  •     canvas.drawColor(Color.argb(100, 0, 0, 255), Mode.SRC);  
  •     break;  
  •       
  • case 3:  
  •     // paint方式的绘制颜色  
  •     Paint paint = new Paint();  
  •     paint.setARGB(100, 0xEE, 0xEE, 0xEE);  
  •     canvas.drawPaint(paint);  
  •     break;  
  • }  


19e504cc-ff7f-34a8-a564-40e7aa30d345.jpg 

绘制Bitmap 
Java代码   icon_star.jpg 

  • switch (keyUpCount) {  
  • case 0: // 在(x, y)除绘制bitmap  
  •     canvas.drawBitmap(chameleonBmp, 20, 20, null);  
  •     break;  
  •       
  • case 1: // 利用变换矩阵绘制bimap  
  •     Matrix matrix = new Matrix();  
  •     matrix.setRotate(10);  
  •     matrix.preTranslate(50, 50);  
  •     canvas.drawBitmap(chameleonBmp, matrix, null);  
  •     break;  
  •       
  • case 2:  
  •     // 将图片的(0, 0, 100, 184)区域拉伸或缩放到canvas的  
  •     // (50, 50, 250, 418)区域进行绘制  
  •     Rect src = new Rect();  
  •     src.set(0, 0, 100, 184);  
  •     Rect dst = new Rect();  
  •     dst.set(50, 50, 250, 418);  
  •     canvas.drawBitmap(chameleonBmp, src, dst, null);  
  •     // canvas.drawBitmap(Bitmap, Rect, RectF, Paint); 与上面类似  
  •     // 就是RectF是Rect的float版本  
  •     break;  
  •       
  • case 3:  
  •     // 自己构建bitmap的每个像素点,并将其绘制到canvas上  
  •     // 也就是说200x200的bitmap,需要自己构建40000个像素点  
  •     int[] bmpPixels = new int[] {  
  •             Color.RED, Color.RED, Color.RED, Color.RED, Color.RED,  
  •             Color.RED, Color.RED, Color.RED, Color.RED, Color.RED,  
  •             Color.RED, Color.RED, Color.RED, Color.RED, Color.RED,  
  •   
  •             Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN,  
  •             Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN,  
  •             Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN,  
  •   
  •             Color.BLUE, Color.BLUE, Color.BLUE, Color.BLUE, Color.BLUE,  
  •             Color.BLUE, Color.BLUE, Color.BLUE, Color.BLUE, Color.BLUE,  
  •             Color.BLUE, Color.BLUE, Color.BLUE, Color.BLUE, Color.BLUE  
  •     };  
  •     canvas.drawBitmap(bmpPixels, 0, 15, 20, 20, 15, 3, false, null);  
  •     break;  
  • }  


9b5b0999-1258-317d-90db-fd721f2fca04.jpg 

绘制基本的几何图形(绘制几何图形时,必须使用画笔paint) 
Java代码   icon_star.jpg 

  • Paint paint = new Paint();  
  • paint.setColor(Color.RED); // 画笔颜色  
  • paint.setAntiAlias(true); // 反锯齿  
  • paint.setStyle(Paint.Style.STROKE); // 笔触绘制  
  • paint.setStrokeWidth(3); // 笔触宽度  
  •   
  • switch (keyUpCount) {  
  • case 0: // 点  
  •     for (int i = 1; i <= 10; i++) {  
  •         canvas.drawPoint(i * 10, 20, paint);  
  •     }  
  •     break;  
  •       
  • case 1: // 直线  
  •     for (int i = 1; i < 10; i++) {  
  •         canvas.drawLine(10, i * 10, 200, i * 10, paint);  
  •     }  
  •     break;  
  •       
  • case 2: // 圆  
  •     canvas.drawCircle(100, 100, 90, paint);  
  •     break;  
  •       
  • case 3: // 弧线和矩形  
  •     RectF outRect = new RectF(10, 10, 110, 110);  
  •     canvas.drawRect(outRect, paint);  
  •     float startAngle = 70;  
  •     float sweepAngle = 180;  
  •     canvas.drawArc(outRect, startAngle, sweepAngle, false, paint);  
  •     break;  
  •       
  • case 4: // 椭圆  
  •     canvas.drawOval(new RectF(10, 10, 110, 60), paint);  
  •     break;  
  •       
  • case 5: // 路径(任意边型)  
  •     Path path = new Path();  
  •     path.moveTo(10, 10);  
  •     path.lineTo(200, 10);  
  •     path.lineTo(140, 60);  
  •     path.lineTo(120, 30);  
  •     canvas.drawPath(path, paint);  
  •     break;  
  •       
  • case 6: // 圆角矩形  
  •     RectF rect = new RectF(10, 10, 100, 100);  
  •     canvas.drawRoundRect(rect, 20, 40, paint);  
  •     break;  
  • }  


075687e8-b743-3da8-a18d-e5ae8f9ad6a2.jpg 


canvas的一些效果  
翻转效果,这样在使用图片时,左和右的图片就可以重用了。 
Java代码   icon_star.jpg 

  • Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.image830);  
  •   
  • canvas.drawColor(Color.WHITE);  
  • canvas.drawBitmap(bmp, 100, 160, null);  
  • // 水平翻转  
  • canvas.save();  
  • canvas.scale(-1, 1, 240, 160);  
  • canvas.drawBitmap(bmp, 240, 160, null);  
  • canvas.restore();  
  •   
  • // 垂直翻转  
  • canvas.save();  
  • canvas.scale(1, -1, 300, 160);  
  • canvas.drawBitmap(bmp, 300, 160, null);  
  • canvas.restore();  


1c161110-5542-3aff-b5c3-2d2f1530131a.jpg 


绘制文本  
Paint.Align 文本如何对其(x, y)绘制 
1f337001-667c-3f2e-b959-622dbd29a420.jpg 
第一个是(x, y)位于文本左侧;第二个是(x, y)位于文本中间的;第三个是(x, y)位于文本的右侧。但他们都是canvas.drawText("...", x, y, paint); 仅仅是paint设置的不同了哦。 

Paint.FontMetrics:字体元数据 
下图是对该部分涉及的排版术语的图形描述: 
d5c93e6e-40dd-343e-af2d-8300ab2925e4.jpg 
Paint.FontMetrics.top:某种字体中,基线以上的最大距离(就是ascent的最大值) 
Paint.FontMetrics.bottom:某种字体中,基线以下的最大距离(就是descent的最小值) 

Java代码   icon_star.jpg 

  • Paint paint = new Paint();  
  • paint.setColor(Color.RED); // 画笔颜色  
  • paint.setAntiAlias(true); // 抗锯齿  
  • paint.setStyle(Style.STROKE); // 笔触绘制  
  • paint.setTextSize(30); // 字体大小  
  •   
  • switch (keyUpCount) {  
  • case 0: // 下划线文本  
  •     Paint paint0 = new Paint(paint);  
  •     paint0.setUnderlineText(true);  
  •     canvas.drawText("underline text", 10, 50, paint0);  
  •     break;  
  •       
  • case 1: // x方向倾斜文本  
  •     Paint paint1 = new Paint(paint);  
  •     paint1.setTextSkewX(-0.3F);  
  •     char[] chars = "text skew x".toCharArray();  
  •     canvas.drawText(chars, 0, chars.length, 10, 50, paint1);  
  •     break;  
  •       
  • case 2: // 缩放文本  
  •     Paint paint2 = new Paint(paint);  
  •     paint2.setTextScaleX(3.0F);  
  •     paint2.setTextSize(15);  
  •     canvas.drawText("text scale x", 0, 12, 10, 50, paint2);  
  •     break;  
  •       
  • case 3: // 使用自定义字体的文本  
  •     Paint paint3 = new Paint(paint);  
  •     paint3.setTextSize(45);  
  •     paint3.setColor(Color.BLUE);  
  •     Typeface shift = Typeface.createFromAsset(getAssets(), "fonts/Shift.ttf");  
  •     paint3.setTypeface(shift);  
  •     canvas.drawText("Shift.ttf", 0, 9, 10, 50, paint3);  
  •       
  •     /* font attributes
  •     Paint.FontMetrics fontMetrics = paint3.getFontMetrics();
  •     fontMetrics.ascent;
  •     paint3.ascent();
  •     fontMetrics.descent;
  •     paint3.descent();
  •     fontMetrics.leading;
  •     fontMetrics.top;
  •     fontMetrics.bottom;
  •     */  
  •     break;  
  •       
  • case 4: // 路径文本  
  •     String text = "abcdefghijklmnOPQRST12345";  
  •     Paint paint4 = new Paint();  
  •     paint4.setColor(Color.BLUE);  
  •     paint4.setStyle(Style.STROKE);  
  •     // draw path  
  •     Path path = new Path();  
  •     path.moveTo(10, 100);  
  •     path.cubicTo(110, 200, 210, 0, 310, 100);  
  •     canvas.drawPath(path, paint4);  
  •     // draw text  
  •     paint.setTextSize(20);  
  •     canvas.drawTextOnPath(text, path, 20.0F, 5.0F, paint);  
  •     break;  


5abc89ee-165d-34b4-8938-1bf9b47c89ff.jpg 


canvas变换,save, restore, layer的使用  
layer其实就相当于photoshop中图层的概念,对当前图层的操作是不影响其它图层的。 
Java代码   icon_star.jpg 

  • Paint paint = new Paint();  
  • paint.setColor(Color.RED);  
  • paint.setAntiAlias(true);  
  • paint.setStyle(Paint.Style.STROKE);  
  • paint.setStrokeWidth(3);  
  •   
  • switch (keyUpCount) {  
  • case 0: // rotate旋转  
  •     canvas.rotate(20);  
  •     canvas.drawRect(10, 10, 300, 210, paint);  
  •     break;  
  •       
  • case 1: // translate移动  
  •     canvas.translate(100, 0);  
  •     canvas.drawRect(10, 10, 300, 210, paint);  
  •     break;  
  •       
  • case 2: // skew倾斜  
  •     canvas.skew(0.2F, 0);  
  •     canvas.drawRect(10, 10, 300, 210, paint);  
  •     break;  
  •       
  • case 3: // 缩放  
  •     canvas.scale(0.5F, 1);  
  •     canvas.drawRect(10, 10, 300, 210, paint);  
  •     break;  
  •       
  • case 4: // 没用save, restore  
  •     canvas.rotate(20);  
  •     canvas.drawRect(10, 10, 60, 60, paint);  
  •     canvas.translate(50, 0);  
  •     canvas.drawRect(10, 10, 70, 70, paint);  
  •     break;  
  •       
  • case 5: // 用了save, restore  
  •     int saveCount = canvas.save();  
  •     // 将画布旋转20度,然后后面的绘制也都是旋转20度的  
  •     canvas.rotate(20);  
  •     canvas.drawRect(10, 10, 60, 60, paint);  
  •     // 将canvas还原到没rotate前  
  •     canvas.restoreToCount(saveCount);  
  •     canvas.translate(50, 0);  
  •     canvas.drawRect(10, 10, 70, 70, paint);  
  •     break;  
  •       
  • case 6: // 没使用图层  
  •     paint.setStyle(Paint.Style.FILL);  
  •     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.LIGHTEN));  
  •     canvas.drawRect(0, 0, 100, 100, paint);  
  •     canvas.drawRect(100, 100, 200, 200, paint);  
  •     paint.setColor(Color.BLUE);  
  •     canvas.drawRect(50, 50, 150, 150, paint);  
  •     break;  
  •       
  • case 7: // 使用了图层layer  
  •     paint.setStyle(Paint.Style.FILL);  
  •     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.LIGHTEN));  
  •     canvas.drawRect(0, 0, 100, 100, paint);  
  •     // 创建一个图层  
  •     int layerSC = canvas.saveLayer(null, null,  
  •             Canvas.MATRIX_SAVE_FLAG | // 合并图层时,restore应用于图层的变换  
  •             Canvas.HAS_ALPHA_LAYER_SAVE_FLAG |  
  •             Canvas.FULL_COLOR_LAYER_SAVE_FLAG);  
  •     canvas.translate(100, 100);  
  •     canvas.drawRect(0, 0, 100, 100, paint);  
  •     paint.setColor(Color.BLUE);  
  •     canvas.translate(-50, -50);  
  •     canvas.drawRect(0, 0, 100, 100, paint);  
  •     canvas.restoreToCount(layerSC); // 合并图层  
  •     break;  


5a43b1e7-762d-3499-b8b9-994caf21da42.jpg 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AppWizard has created this drawGraphics application for you. This application not only demonstrates the basics of using the Microsoft Foundation classes but is also a starting point for writing your application. This file contains a summary of what you will find in each of the files that make up your drawGraphics application. drawGraphics.dsp This file (the project file) contains information at the project level and is used to build a single project or subproject. Other users can share the project (.dsp) file, but they should export the makefiles locally. drawGraphics.h This is the main header file for the application. It includes other project specific headers (including Resource.h) and declares the CDrawGraphicsApp application class. drawGraphics.cpp This is the main application source file that contains the application class CDrawGraphicsApp. drawGraphics.rc This is a listing of all of the Microsoft Windows resources that the program uses. It includes the icons, bitmaps, and cursors that are stored in the RES subdirectory. This file can be directly edited in Microsoft Visual C++. drawGraphics.clw This file contains information used by ClassWizard to edit existing classes or add new classes. ClassWizard also uses this file to store information needed to create and edit message maps and dialog data maps and to create prototype member functions. resdrawGraphics.ico This is an icon file, which is used as the application s icon. This icon is included by the main resource file drawGraphics.rc. resdrawGraphics.rc2 This file contains resources that are not edited by Microsoft Visual C++. You should place all resources not editable by the resource editor in this file.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值