Android中圆形图的几种实现方式

android 画圆形图 获取圆形bitmap 注意,本人博客主要是为了自己记录,如果有问题欢迎反馈哈。 android里画圆形图的方法,我知道四种,前三种是java代码,此次重点记录这三种方法,最后一种是利用shape、shape-layer将图片显示成圆形,这种方法可自行上网百度,不推荐。 三种java代码方法,分别是使用BitmapShader(图片渲染)、PorterDuffXfermode(图片混合模式)、ClipPath (裁剪... 阅读详情

在Android开发中,圆形图片是很常见的,例如淘宝的宝贝,QQ的联系人头像等都是圆形的图片,


但是Android原生的ImageView又不能显示圆形的图片,这就需要我们自己去实现一个圆形图了

一、自定义View实现圆形图

我们可以去改造Android系统自带的ImageView来让它显示圆形图片,具体思路是利用画笔的层叠属性,在图片的底部绘制一个圆形,然后显示上下两层的交集部分,就可以做出一个圆形的ImageView了

1.1继承ImageView

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import android.content.Context;  
  2. import android.graphics.Bitmap;  
  3. import android.graphics.Canvas;  
  4. import android.graphics.Paint;  
  5. import android.graphics.PorterDuff;  
  6. import android.graphics.PorterDuffXfermode;  
  7. import android.graphics.Rect;  
  8. import android.util.AttributeSet;  
  9. import android.widget.ImageView;  
  10.   
  11. /** 
  12.  * Created by ChenFengYao on 16/3/15. 
  13.  */  
  14. public class RoundImageView extends ImageView {  
  15.     private Paint paint;  
  16.   
  17.     public RoundImageView(Context context) {  
  18.         super(context);  
  19.         paint  = new Paint();//初始化画笔对象  
  20.     }  
  21.   
  22.     public RoundImageView(Context context, AttributeSet attrs) {  
  23.         super(context, attrs);  
  24.         paint  = new Paint();//初始化画笔对象  
  25.     }  
  26.   
  27.     public RoundImageView(Context context, AttributeSet attrs, int defStyleAttr) {  
  28.         super(context, attrs, defStyleAttr);  
  29.         paint  = new Paint();//初始化画笔对象  
  30.     }  
  31. }  

继承ImageView复写其中的构造方法,并在构造方法里对画笔对象进行初始化

1.2复写onDraw方法

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Override  
  2.    protected void onDraw(Canvas canvas) {  
  3.        Drawable drawable = getDrawable();  
  4.        if (null != drawable) {  
  5.            Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();  
  6.            //核心代码  
  7.            Bitmap b = getCircleBitmap(bitmap);  
  8.            paint.reset();  
  9.            canvas.drawBitmap(b,0,0,paint);  
  10.        } else {  
  11.            super.onDraw(canvas);  
  12.        }  
  13.    }  

onDraw方法即图片绘制的时候系统所调用的方法,在该方法内部首先去判断是否设置了图片的src,如果能拿到改View设置的图片,则将它转换成圆形图片,如果没有设置的话,则不做任何操作,直接调用父类的onDraw方法

1.2getCircleBitmap

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. private Bitmap getCircleBitmap(Bitmap bitmap){  
  2.         Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),  
  3.                 bitmap.getHeight(), Bitmap.Config.ARGB_8888);  
  4.         Canvas canvas = new Canvas(output);  
  5.         Rect rect = new Rect(0,0,bitmap.getWidth(),bitmap.getHeight());  
  6.         paint.setAntiAlias(true);  
  7.         canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getHeight() / 2, paint);  
  8.         paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));  
  9.         canvas.drawBitmap(bitmap, rect, rect, paint);//将图片画出来  
  10.         return output;  
  11. }  

这是获取圆形图的方法,目的是将我们自定义的View中的图片,转化成圆形的Bitmap,这里需要Canvas对象,首先画一个圆形的底层,再在其上放上我们的图片,通过设置画笔的paint的Xfermode属性,该属性是用来设置前后图层的显示关系的,这是设置Mode.SRC_IN,的意思是输出的范围是底层图形的范围,而显示的内容是上层的内容

1.2.1paint.setXfermode()

Xfermode有大神称之为过渡模式,这种翻译比较贴切但恐怕不易理解,大家也可以直接称之为图像混合模式,因为所谓的“过渡”其实就是图像混合的一种,简单来说,可以理解成图片的叠加方式.
我们可以看一下图片的16中叠加方式

PorterDuff.Mode.CLEAR

所绘制不会提交到画布上。

PorterDuff.Mode.SRC

显示上层绘制图片

PorterDuff.Mode.DST

显示下层绘制图片

PorterDuff.Mode.SRC_OVER

正常绘制显示,上下层绘制叠盖

PorterDuff.Mode.DST_OVER

上下层都显示。下层居上显示

PorterDuff.Mode.SRC_IN

取两层绘制交集。显示上层

PorterDuff.Mode.DST_IN

取两层绘制交集。显示下层

PorterDuff.Mode.SRC_OUT

取上层绘制非交集部分

PorterDuff.Mode.DST_OUT

取下层绘制非交集部分

PorterDuff.Mode.SRC_ATOP

取下层非交集部分与上层交集部分

PorterDuff.Mode.DST_ATOP

取上层非交集部分与下层交集部分

PorterDuff.Mode.XOR

取两层绘制非交集。两层绘制非交集

PorterDuff.Mode.DARKEN

上下层都显示。变暗

PorterDuff.Mode.LIGHTEN

上下层都显示。变亮

PorterDuff.Mode.MULTIPLY

取两层绘制交集

PorterDuff.Mode.SCREEN

上下层都显示

1.2.2Canvas

Canvas类可以绘制各种的图形,在绘制的时候会将绘制好的内容保存在Canvas的内部,可以将所绘制的内容输出为一张Bitmap,这张Bitmap即在new Canvas的时候通过构造方法传进去.而在onDraw方法中传入的Canvas则会在绘制完毕后,直接将内部的内容输出到屏幕上的.

1.3测试

写好了之后,我们来测试一下
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <com.lanou.chenfengyao.temproundimageview.RoundImageView  
  2.         android:layout_width="wrap_content"  
  3.         android:layout_height="wrap_content"  
  4.         android:src="@mipmap/test_img"/>  


看 图片已经被处理成圆形的了

1.4 添加功能

我们希望可以用我们自己的RoundImageView来实现即可以显示正常的ImageView也可以显示圆形图片的功能,最好可以能用Java代码动态控制.于是我们添加一个自定义属性
首先在values下新建attrs.xml 代码如下
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <resources>  
  2.     <declare-styleable name="RoundImageView">  
  3.         <attr name="is_round" format="boolean" />  
  4.     </declare-styleable>  
  5. </resources>  
可以看到 我们定义了一条自定义属性:is_round 它是一个boolean值的属性,当属性是false的时候 我们就显示一个正常的图片,当属性是true的时候,则显示一个圆形图片
在RoundImageView中添加一个变量
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. private boolean isRound;  
然后在构造方法里提取这条属性,如果没有提取到,默认值设置为true,让它默认就可以显示圆角图片
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public RoundImageView(Context context, AttributeSet attrs, int defStyleAttr) {  
  2.         super(context, attrs, defStyleAttr);  
  3.         paint = new Paint();//初始化画笔对象  
  4.         TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundImageView);  
  5.         isRound = typedArray.getBoolean(R.styleable.RoundImageView_is_round, true);  
  6. }  
为了增加实用性 我们改造一下剩下的构造方法
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public RoundImageView(Context context) {  
  2.         this(context, null);  
  3. }  
  4.   
  5. public RoundImageView(Context context, AttributeSet attrs) {  
  6.         this(context, attrs, 0);  
  7. }  
接下来在onDraw方法里进行一次判断,如果需要显示圆形图,才显示圆形图
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Override  
  2.    protected void onDraw(Canvas canvas) {  
  3.        Drawable drawable = getDrawable();  
  4.        if (null != drawable && isRound) {  
  5.            Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();  
  6.            //核心代码  
  7.            Bitmap b = getCircleBitmap(bitmap);  
  8.            paint.reset();  
  9.            canvas.drawBitmap(b, 0, 0, paint);  
  10.            b.recycle();  
  11.        } else {  
  12.            super.onDraw(canvas);  
  13.        }  
  14.    }  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">测试一下,我们将我们的组件的is_round属性改成false看看效果</span>  
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     xmlns:app="http://schemas.android.com/apk/res-auto"  
  6.     android:paddingBottom="@dimen/activity_vertical_margin"  
  7.     android:paddingLeft="@dimen/activity_horizontal_margin"  
  8.     android:paddingRight="@dimen/activity_horizontal_margin"  
  9.     android:paddingTop="@dimen/activity_vertical_margin"  
  10.     tools:context="com.lanou.chenfengyao.temproundimageview.MainActivity">  
  11.   
  12.     <com.lanou.chenfengyao.temproundimageview.RoundImageView  
  13.         android:layout_width="wrap_content"  
  14.         android:layout_height="wrap_content"  
  15.         android:src="@mipmap/test_img"  
  16.         app:is_round="false"/>  
  17. </RelativeLayout>  
注意,我们自定义的属性,命名空间不要忘记了
来看看效果


可以看到,现在的RoundImageView就和正常的ImageView的效果是一样的啦.
现在我们再写一个方法能让RoundImgeView动态的改变圆形或是正常的,在RoundImageView里添加方法
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public void setIsRound(boolean isRound) {  
  2.         this.isRound = isRound;  
  3.         invalidate();  
  4.     }  
现在我们在Activity里放上一个按钮,点击它切换显示模式,来测试一下

可以看到 我们的图片可以通过Java代码来动态的切换正常模式和圆形图片啦

二、使用Fresco显示圆形图片

Fresco是FaceBook推出的专门用来加载图片的类库,它可以加载网络图片,并且有丰富的效果,并且最重要的是,它具有中文文档!
文档地址http://www.fresco-cn.org/
根据文档我们首先在gradle里加上
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. compile 'com.facebook.fresco:fresco:0.9.0+'  
另外Fresco在使用的时候需要对其进行初始化,可以在需要的Activity里的onCreate方法里添加
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Fresco.initialize(this);  
建议将这行代码添加到Application里进行全局的初始化
在使用起来就变得很简单了,只需要在xml里添加
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <com.facebook.drawee.view.SimpleDraweeView  
  2.         fresco:roundAsCircle = "true"  
  3.         fresco:actualImageScaleType="centerInside"  
  4.         fresco:roundingBorderColor="@color/colorAccent"  
  5.         fresco:roundingBorderWidth="1dp"  
  6.         android:layout_width="match_parent"  
  7.         android:layout_height="match_parent"  
  8.         fresco:backgroundImage="@mipmap/test_img"/>  
并且不要忘记命名空间
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. xmlns:fresco="http://schemas.android.com/apk/res-auto"  
看一下效果


可以看到出现了圆形图片,并且还有1dp的红色边框

2.1一些坑

Fresco在这种使用方式的时候有一些坑是值得注意的,首先根据官方的说法,会在后续的版本中不再继承自ImageView,所以不建议使用ImageView的一些属性和方法,例如src等.
第二,该空间无法使用wrap_content的方式来指定宽高,这点略坑...

三、利用sharp做圆形图

我们也可以使用ImageView和sharp来完成一个圆形图片的效果,首先在drawable里新建circle.xml
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <shape  
  2.     android:innerRadius="0dp"  
  3.     android:shape="ring"  
  4.     android:thicknessRatio="1"  
  5.     android:useLevel="false"  
  6.     xmlns:android="http://schemas.android.com/apk/res/android">  
  7.   
  8.     <solid android:color="@android:color/transparent" />  
  9.   
  10.     <stroke  
  11.         android:width="68dp"  
  12.         android:color="#FFFFFFFF" />  
  13. </shape>  
让shape是ring即环形,并且设置填充颜色为白色,线宽需要根据图片自己调整
然后再drable里新建round_layers.xml
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
  2.     <item android:drawable="@mipmap/test_img" />  
  3.     <item android:drawable="@drawable/circle" />  
  4. </layer-list>  
layer-list的意思是让ImageView中显示的图片产生一个叠加的效果,越靠下写的,在显示的时候就越靠上层
最后让ImageView使用该xml
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <ImageView  
  2.         android:layout_width="wrap_content"  
  3.         android:layout_height="wrap_content"  
  4.         android:src="@drawable/round_layers"/>  
看一下效果吧


实际上,该方法的原理就是在正常的ImageView上再叠加了一个白色的环形图形,这样显示的效果就是圆形图片了.但是缺点也是显而易见的,即需要手动的调节环形的粗细,比较难控制
Android多种方式实现相机圆形预览 看这一篇就够了 如图所示,和Android的View坐标系不同,OpenGL的坐标系是笛卡尔坐标系。Android View的坐标系以左上角为原点, 阅读详情

相关推荐

Android 设置应用图标形状为 Squircle 默认值

首先,我们需要创建适配 Squircle 图标形状的图标资源。通过按照上述步骤,我们可以将 Android 应用的图标形状默认设置为 Squircle。最后,我们需要在应用启动时设置应用图标的形状为 Squircle。接下来,在应用的 AndroidManifest.xml 文件中,我们需要声明适配 Squircle 图标形状的图标资源。是适配 Squircle 图标形状的图标资源的引用。现在,当用户安装或更新应用时,系统将使用 Squircle 形状的图标作为应用的图标。如果你有任何疑问,请随时提问。

CyberSparkZ的博客 529

实现圆形图片、圆形背景

简单记录在Android开发中实现圆形图片/圆角图片/圆角矩形形状的方法

m0_60949336的博客 1641

Android实现圆形图像的两种方法(Glide和Picasso)

Android实现圆形图像的两种方法(Glide和Picasso)

是阿超 1377

Android 实现圆角/圆形图片的几种方式

1、Xfermode 绘制两层,先绘制形状,再绘制图片,然后根据Xfermode来去计算两个图层的关系(SRC_IN:显示的区域是二者交集)。 Glide实现圆形图片 static { CIRCLE_CROP_BITMAP_PAINT = new Paint(CIRCLE_CROP_PAINT_FLAGS); CIRCLE_CROP_BITMAP_PAINT.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); }

雨汨的博客 964

Android轻松实现图片的圆形化处理(基于xml文件快速实现)

大家知道,在Android应用开发中,对于图形的处理是非常重要的,它在一定程度上决定着UI界面的美观,今天为大家介绍一个比较好用的图片圆形化处理的第三方库,轻松实现图片圆形化处理,接下来让我们一起学习吧。一、引入第三方依赖库此处引入的是github中的比较好用的第三方的开源库,相关地址如下:导入app模块下的build.gradle中即可正常使用。有任何问题请在评论区交流,或者直接私信我,看到就会回复的。

m0_58941767的博客 2513

AI算力瓶颈与系统优化实战指南

AI算力瓶颈已成为制约人工智能发展的关键因素,特别是在处理transformer类模型时,传统的冯·诺依曼架构面临严重的'内存墙'问题。通过硬件加速、系统优化和算法改进的三级策略,可以有效提升资源利用率。在嵌入式AI领域,结合量化、剪枝和专用指令集扩展等技术,能在资源受限设备上实现高效推理。这些优化方法在自动驾驶、工业视觉等场景中已展现出显著价值,推动AI应用从云端向边缘迁移。随着AI算力需求的持续增长,掌握系统优化技能将成为开发者的核心竞争力。

weixin_32597009的博客 339

Android 圆形头像的两种实现方式

/绘制形状//将准备好的bitmap绘制出来//bitmap缓存起来,避免每次调用onDraw,分配内存//如果bitmap还存在,则直接绘制即可if (bitmap!/**绘制形状@return*/} elsepaint);以上代码来自鸿洋大神的博客第二种方法: 使用 BitmapShader 实现官方文档说的很清楚了:BitmapShader的作用是使用特定的图片来作为纹理来使用。

2501_90404652的博客 968

本地大模型5:在pycharm用python调用ollama本地大模型

python调用ollama本地大模型

weixin_74825941的博客 8376

Android | 多种方式实现图片圆角矩形和圆形效果

以上介绍了几种常见的在 Android 中实现图片圆角矩形和圆形效果的方法,每种方式都有其使用场景和特点。自定义 ImageView 并重写 onDraw() 方法,通过 Canvas.clipPath() 实现图片的圆角矩形和圆形效果。Glide 是一个强大的图片加载库,通过它的 RequestOptions 可以轻松实现图片的圆角处理。BitmapShader 是 Android 中的一种着色器,通过它可以实现自定义的圆角和圆形图片。本文将介绍几种常见的实现方式,并提供对应的代码示例。

小马快跑的博客 3510

基于 Langchain 开发一个完整的支持多轮数据分析(直连 mysql 数据,多表综合分析 SQL 取数,数据分析,报表生成)ChatBI 系统(前后端完整实现源代码)

ChatBI系统开发摘要 本文介绍了基于Langchain的多轮数据分析ChatBI系统开发方案。该系统支持MySQL数据库连接,提供多表分析、SQL查询、数据分析和报表生成功能。系统采用前后端分离架构:前端使用React+Ant Design+ECharts实现交互界面;后端基于FastAPI搭建服务,集成Langchain处理自然语言到SQL的转换;核心技术栈还包括SQLAlchemy、Pandas和Matplotlib。 系统核心模块包括: 数据库连接层:使用SQLAlchemy管理MySQL连接 L

AI天才研究院 814

锂电池寿命预测 | Python实现基于LSTM长短期记忆神经网络的锂电池寿命预测

锂电池寿命预测 | Python实现基于LSTM长短期记忆神经网络的锂电池寿命预测

算法如诗的博客 1902

Android多种方式实现相机圆形预览

效果图如下: 一、为预览控件设置圆角 为控件设置ViewOutlineProvider public RoundTextureView(Context context, AttributeSet attrs) { super(context, attrs); setOutlineProvider(new ViewOutlineProvider() { ...

Rising_sun2017的博客 1198

数据预处理

数据预处理 数据预处理(数据清洗)是数据挖掘过程中的重要一步,它主要包括数据清洗,数据集成,数据变换和数据规约。 在我们进行数据挖掘的过程中,大量的原始数据中存在着大量有问题的数据(脏数据)比如有缺失值的,不一致的,有异常的,大量重复的数据等。这些脏数据会严重影响到数据挖掘建模过程的执行效率,也可能会使挖掘结果产生偏差。通过数据预处理(数据清洗)可以提高数据的质量,更好的适应特定的挖掘技术及工具。...

CJW的博客 9929

Android 打造炫目的圆形菜单 秒秒钟高仿建行圆形菜单

转载请标明出处:http://blog.youkuaiyun.com/lmj623565791/article/details/43131133,本文出自:【张鸿洋的博客】1、概述今天打开建行看存款,一看伤心欲绝,再看:我擦,这个圆形菜单挺炫。于是,为了掩盖我悲痛的心情,我决定是实现这个效果。好了,其实还有个原因,记得我初学android那会我做的应用被鄙视了,说我的菜单没有建行的好看,那么今天,证明自己的时

Hongyang 10万+

【乐企文件生成工程】乐企文件生成支持所有特定要素类型发票

【代码】【乐企文件】乐企文件生成最新更新!!!

九七的博客 850

2026年最值得学习的十大 SAP 开发技术

在这辞旧迎新之际,我想和大家聊聊我心中的2026年我仍然愿意持续投入时间去学习的一些 SAP 开发技术。因为笔者水平和视野局限,加上这份清单有笔者主观兴趣爱好在内,可能大家对清单上罗列的技术有不同意见,欢迎大家在评论区发表自己的见解。下面是笔者列出的十个技术方向,排名不分先后。因为精力有限,2026年我很可能只会选择其中一两个自己最感兴趣的方向去深耕。每项技术后面都提供了链接,方便大家看完就开始学习。

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

Android 实现圆形图片的几种方法

第一种:Android的样式设置            ImageView中在设置图片时有src属性或者background属性,这两种属性都可以调用android中的drawable资源,因此在drawable这种创建一个根标签为shape的文件就可以设置成为圆形图片;          1、 下面是一个例子:       xmlns:android="http://schemas.an

qq_35356306的博客 897

【keil5和STC-ISP】保姆级下载安装教程

点击下载中的产品下载。然后就会看到如下界面:可以看到,提供了针对不同芯片架构的四套独立开发工具。:你使用的51单片机,其核心就是。C51套件里的编译器是专门为这个架构优化的。:如果安装了MDK-Arm,你在创建新项目时将像“AT89C51”这样的51系列芯片型号,无法进行开发。进入如下界面:双击下载 → 双击运行安装 → 同意协议并下一步 → 使用默认安装路径 → 完成安装。

深耕CV 1642

Android 三种方式实现圆形ImageView

Android 三种方式实现圆形ImageView

if(...){...} 1965

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android 圆形头像的两种实现方式(1)

第一种: 使用 Paint 的 Xfermode 实战圆形头像,我们可以看成是 在原图上面绘制一个圆,再取交集。从代码的角度来讲,先绘制 Dst,再绘制 Src,显示的区域是二者交集,由此可知 SrcIn 符合我们的要求。

onghaha的博客 787

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

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

上一篇: android——Bitmap.Config ARGB_8888
下一篇: Android开发之自定义圆形的ImageView的实现
Happy_Develop_
博客等级 码龄12年 26粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值