自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程龙的博客

知道的越多,不知道的越多。

  • 博客(205)
  • 资源 (7)
  • 问答 (1)
  • 收藏
  • 关注

原创 2022总结,强风吹拂

2022年得到了之前一直想得到的华为云享专家证书,阿里云开发者证书,CSDN博客专家、腾讯,和一些小礼物等,得到后发现我并没有想象中那么开心,现在没什么可分享的,这些一笔带过吧,说实话没什么门槛,只要想得到,加把劲儿就得到如何下笔写这份总结呢,我本身并不是和擅长做计划与总结的人,很多人用摆烂来形容这一年来的经历,我又何尝不是呢,仔细回想下,本人还是比去年有些进步呢(留在后面说),换个角度想,大家摆烂有什么错呢,也许是对当下不满的环境无声的抵抗。开发技术上的自我提升,约等于无吧,老实讲,我不喜欢工作,不是指

2023-01-07 11:46:55 121 5

原创 Kubernetes存储架构原理深度剖析

声明:本篇文章部分资料来自《华为云云原生钻石课程》黄金课程集训营第5课,本课程为钻石课程的第五课,由云原生存储解决方案Everest2.0的架构设计专家Jabin主讲,跟随K8S的存储演进史,进一步了解容器存储的架构设计。学完本课程后,您将能够了解到:了解Kubernetes容器存储发展历程了解StorageClass工作原理了解CSI容器存储接口架构了解Kubernetes out-tree存储兼容in-tree存储的机制本文将会分为三个部分讲解:StorageClass工作原.

2022-12-16 10:17:50 368 4

原创 Android字体渐变效果

canvas的save()和restore()方法可以理解为将当前绘制的东西当作一个新的图层!可以看出,还是上面说的那个问题,文字绘制是基于baseLine线来绘制的。原色 – 没有被过度绘制 – 这部分的像素点只在屏幕上绘制了一次。绿色 – 2次过度绘制 – 这部分的像素点只在屏幕上绘制了三次。粉色 – 3次过度绘制 – 这部分的像素点只在屏幕上绘制了四次。红色 – 4次过度绘制 – 这部分的像素点只在屏幕上绘制了五次。通过手势滑动来控制。蓝色 – 1次过度绘制– 这部分的像素点只在屏幕上绘制了两次。

2022-12-16 10:09:48 437

原创 Android dp sp 的区别

因此通常情况下,我们还是建议使用sp作为字体的单位,除非一些特殊的情况,不想跟随系统字体变化的,可以使用dp。由此可以看出使用sp作为字体大小单位,会随着系统的字体大小改变,而dp作为单位则不会。而 dp 也叫 dip,是 device independent pixels。

2022-11-25 15:13:00 355

原创 Android:RecyclerView滑动到边缘时的光晕效果

对于RecyclerView 都已经不再陌生,我们大家都知道RecyclerView等可滑动控件默认的是会有滚动条以及滑动到边缘时的阴影(光晕)效果的,那么怎样去掉这两个默认属性呢,在这里简单的介绍一下。

2022-11-25 14:34:43 172

原创 Android设置TabLayout及下划线宽度

不过,使用动态的话,如果不设置相关的属性,是不能达到两个选项各自占长度一半,还得给Tablayout加上下列属性。先是通过findviewbyid方法找到实例,之后调用tablayout的newTab方法来创建tab。最后根据 android:width=“40dp” 就可以设置指定的宽度,我这里是40dp。app:tabMaxWidth=“xxdp” 设置最大的tab宽度。app:tabMinWidth=“xxdp” 设置最小的tab宽度。app:tabMod 设置Tab模式。Tablayout的使用。

2022-11-19 21:21:01 714

原创 Android tint颜色渲染

我们可以通过xml中的属性android:backgroundTint和android:backgroundTintMode来设置,android:backgroundTintMode这个属性传的值就是刚刚上面那些PorterDuff.Mode中的值,效果的话上面的图也展示了。如果设置了android:backgroundTint,那么就会将设置的颜色和原来的背景进行一个叠加的过程,至于如何叠加,就是上面的mode。如果设置了android:background,那么控件的背景颜色就会直接修改。

2022-11-09 20:37:39 135 1

原创 华为云开发:这个双十一数字机器人助你“聚划算”

相信大家都知道最近的数字员工非常火,比如我们中国的商飞上飞院三所的数字员工“思睿”,还有他的专属工号:20952227、还有首位数字化员工,获得21年万科优秀奖的新人奖获得者“崔筱盼”当然我们华为内部也有8000+的数字员工,在HR、供应链、物流、内审等行业工作,是不是很厉害呢,聪明的同学这时候就要问了,那他们是通过什么实现的呢,这就是接下来我们要介绍的 RPA针对上图描述的我们工作中所遇到的痛点,我们就可以使用RPA来解决。

2022-11-01 09:25:10 237

原创 Android音视频——AwesomePlayer到OMX服务过程

初始化MediaPlayerService对象的时候会创建OMX对象,OMX对象的构造函数会创建mMaster, mMaster负责获得与管理硬件平台的硬件解码器组件库。在创建mMaster->makeComponentInstance的过程中,通过上面mVideoTrack传递过来的解码器类型名,找到相对应的解码器的库,然后实例化。到此,就介绍完AwesomePlayer是如何对OMX进行初始化的,以及如何关联到对应硬件 平台上的Hardware解码器的回调流程。其服务器端与OMX在一个 进程空间中。

2022-09-18 12:03:55 871

原创 为什么使用Ubuntu发现没有声音输出?

今天系统刚升级为Ubuntu 20.04.5 之后,想戴耳机听歌发现没有声音输出检查了右下角的声卡小喇叭也是开启的,在设置里面的sound选项里面没有多余的声音输出选项,多次重启也无法解决查询资料通过以下步骤解决了这一问题,记录下来希望帮到有需要的人。

2022-09-02 14:15:35 1197

原创 华为云算法:教你零基础AI试妆

妆容迁移是指将目标图上的妆容直接迁移到原图上的技术,也就是将参考图像上的妆容迁移到我们的图片上,我们还要考虑结构,光线,姿态,表情遮挡等情况• 传统方法:侧重于图像预处理、特征提取和反射操作• 基于深度学习的方法:GAN用于图像到图像的迁移任务BeautyGAN—正面&简单的妆容迁移效果表现良好PSGAN—处理多种不同的头部姿态&表情的面部CA-GAN—提出颜色判别器,以改善嘴眼区域的细粒度妆容迁移LADN—将多个重叠区域的局部判别器用于极致化妆风格迁移。...............

2022-08-26 13:36:24 958

原创 Android音视频——OMX 中 Nodeinstance 列表的管理与节点的操作

OMXCodec对具体的component函数的操作,是通过OMXNodelnstance来实现的,如filIBuffer>emptyBuffer>sendCommand等,它们都是通过OMXCore.h中的宏定义间接调用OMX_Component.h的OMX_COMPONENTTYPE中的相应函数指针来完成的。我们又知道AwesomePlayer类中持有OMX客户端,所以这些从OMX组件通知上来的消息就可以到达AwesomePlayer中。在哪里使用kCallbacks呢?......

2022-07-31 18:56:54 773

原创 华为云数据库DDS产品深度赋能

声明:本文参考自《华为云开发者学堂 》,华为云数据库DDS产品深度赋能,主要面向DA、交付、一线、二线数据库从业者,针对DDS常见问题及产品特性进行介绍,涉及:产品特性介绍、产品使用场景介绍、产品常见问题介绍、DDS实例使用规范及最佳实践介绍、DDS副本集内部机制和分片集群内部原理介绍等。本文适合数据库解决方案工程师(DA)、数据库交付工程师、数据库一线&二线从业者、以及对DDS感兴趣的用户,希望读者可以通过本文通过华为云数据库DDS产品深度赋能课程的学习,加强DA、交付、一线、二线对数据库产品的理解和技能

2022-07-02 16:45:18 595

原创 Android音视频——OMX的初始化流程

AwesomePlayer是如何获得OMX服务的呢?过程如下:•在 AwesomePlayer 初始化的时候,会调用 AwesomePlayer::onPrepareAsyncEvent。, 继而调用 AwesomePlayer::initVideoDecoder 以及 AwesomePlayer::initAudioDecoder0•然后开始正式进入OMX以及硬件解码器的初始化工作。之前的AwesomePlayer初始化工作都是在做铺垫。当OMX开始初始化时,才真正开始核 心的初始化工作。我们知道

2022-06-19 13:52:53 295

原创 华为云数据库进阶学习

前言本文分为3个章节进行介绍:第1章 如何实现高可用第2章 性能优化第3章 各行业解决方案介绍希望通过本文能够让你了解行业痛点和数据库技术参数和功能,对了解数据库各项技术参数,云数据库运维能力有所帮助,并且能根据具体场景给出综合解决方案1、 数据库技术参数解读和设置1. 什么是RDS MySQL的高可用通过监控软件实时监控HA集群主备库的状态,发现主库宕机后,由高可用组件实现主备角色的自动切换,并能否保证数据的一致性,有效降低服务不可用时间具备这样能力的集群就是高可用集群,如RDS MySQL的HA集群2.

2022-06-19 12:25:56 386

原创 华为云图引擎服务

前言本文将分为以下3个部分进行介绍:第1章 什么是图计算第2章 图引擎服务介绍第3章 查询和分析功能介绍本文主要介绍了图计算定义及特点,希望通过本文能够让你了解图计算及华为云图引擎服务,掌握使用图引擎进行查询和分析在现实生活中,人与人,物品与物品,人与物品之间存在着多样性的关系,我们会获得多种多样的图,如下所示,可以看出图在我们现实生活中是无处不在的。通信网络顶点: devices, routers; 边: network flow社交网络顶点: users, posts; 边: relations, Li

2022-06-19 12:08:43 1726

原创 Android音视频——OpenMAX (OMX)框架

本文分为两个部分进行讲解Codec 部分中的 AwesomePlayer 到 OMX 服务前面介绍了NuPlayer最终解码都会到达OMX框架,也就是 OpenMAX框架,本文开始分析编解码部分中的AwesomePlayer到OMX服务过程,也就是开启OpenMAX准备相关内容。Android系统中用OpenMAX来做编解码,Android向上抽象了一 层OMXCodec,提供给上层播放器AwesomePlayer使用。同时有一个IOMX接口,在ACodec 中可以通过IOMX调用OpenMAX组件。播

2022-06-12 12:25:55 1854

原创 Android音视频——NuPlayer的渲染模块

渲染模块的主要功能如下。下面将音视频原始数据 缓存到队列。在\frameworks\av\media\libmediaplayerservice\上面主要是发送了一个消息kWhatDrainAudioQueue,找到对应接收消息的地方,代码如 下:主要是有一个进行判断的onDrainAudioQueue函数,判断是否需要重新向AudioSink写入 数据,代码如下:到这里,已经很清楚了,音频播放流程如下:先打开音频后端,然后当向音频队列中发送 数据时,音频队列同时向音频后端写入数据,以供播放音频。那

2022-06-04 17:30:10 554

原创 Android音视频——NuPlayer的解码模块

NuPlayer的解码引入了 NuPIayerDecoderBase,这是一个基类。真正的解码器逻辑在 NuPlayerDecoder.cpp文件中,它继承自NuPlayerDecoderBase类。下面先看看实例化解码器, 其位于frameworks\av\media\libmediaplayerservice\nuplayer\NuPlayer.cpp中: status_t NuPlayer::instantiateDecoder(bool audio, sp<DecoderBase&g

2022-05-04 15:14:55 653

原创 详解Kubernetes工作负载管理

希望读者通过接下来代码加图文的介绍对工作负载的概念以及使用场景有更清晰的认识和帮助。1.了解工作负载的概念以及Kubernetes 提供的内置工作负载的信息。2.deployment概念及使用场景3.daemonset概念及使用场景4.job/cronjob概念及使用场景工作负载是在 Kubernetes 上运行的应用程序。无论你的负载是单一组件还是由多个一同工作的组件构成,在 Kubernetes 中你 可以在一组 Pods 中运行它。...

2022-01-26 12:03:17 660

原创 「程思扬」,诚邀投稿

首先先声明虽然你是在csdn关注了我,csdn是关于技术的平台,但「程思扬」不想只做一个专注于学习编程技术 面向计算机程序编程的爱好者的公众号,不限于探讨编程开发技术,推送一些编程技术文章,共享IT资源视频或者代码案例,以及一些科技互联网资讯。也可以有一些关于个人生活中,工作中,一些有趣的事情。1、文章赞赏的所有收入,把文章所有赞赏用微信红包转给您。2、文章头部会标明原作者和原文出处,可以让更多人认识你和你的作品。。3、拥有专属的作者名,以及个人博客地址的推广链接 。4、本人建立个专属微信群,和.

2022-01-01 23:53:00 986 11

原创 2021总结,欲望反光

日历一张张飞过,只剩下12月31日这一天,今天是2021的最后一天了。。。欲望就是一面镜子从中诚实的反射出每一个人内心深处我们最真实的模样

2021-12-31 11:14:24 1489 13

原创 NuPlayer渲染和同步模块

NuPlayer的解码模块相对比较简单,统一使用了一个基类NuPlayerDecoderBase管理,该类中包含了一个MediaCodec的对象,实际解码工作全靠MediaCodec。如果你不会知道MediaCodec是什么,推荐去官网看看:MediaCodec......

2021-12-13 14:15:16 669

原创 为什么有时候在子线程更新UI没报错?

抓住十一月的尾巴,分享一首童年回忆: brave heart看到这个标题,好多人第一时间想到的是什么?感兴趣的不妨跟着下面的代码看看会发生什么?首先我在 onCreate 方法里调用 setText() 方法 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mContext = this Log.e(TAG, "onC

2021-11-30 19:58:53 5375

转载 Android如何获取当前连接wifi的信道?

做网络诊断,需要诊断当前wifi所在信道是否拥挤,目前只是解决了获取当前wifi所在信道,主要是用ScanResult 的frequency字段,还需要用SSID和BSSID从ScanResults匹配到当前的wifi信号wifiInfo,具体代码如下: public static int getCurrentChannel(Context context) { ...

2021-11-26 10:44:35 1754

转载 关于高德地图添加Marker遇到的一些坑你知道吗

最近有一个需求,是一个出行类的App,需要在乘客下单后在地图上显示乘客的头像以及司机的头像。这时候就需要在地图上插上一个markerImageLoader.loadLisenter(mContext,headUrl,imageView);BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory ...

2021-11-25 22:22:45 9838

原创 去微软是什么感受?

首先感谢《新程序员》走进名企活动!!!不知有多少和我一样二十出头的人对《程序员》杂志有所耳闻,生于2001 年的《程序员》曾陪伴了无数开发者成长,(那一年我才3岁0.0)如今已停刊许久,看一些经验丰富的开发者说在互联网还不发达的时代,就是《程序员》伴他们成长的,如今由近百位专家参与、经数月打磨后,《新程序员》也已经发布,希望对此有兴趣的大家可以多多了解一下,我本人也是对积累了这么多技术大师金和优秀非常感谢《新程序员》这次举办的走进名企线下交流活动,让我能够走进微软亚洲研究院去参观,学习,感受到微.

2021-11-25 22:04:50 5468

原创 Android音视频——NuPlayer数据解析模块详解

从上文 Android音视频——NuPlayer框架的图来看可以看到 NuPlayer 的解析模块主要是

2021-08-11 22:37:39 1054

原创 Android源码你是怎么看的?

记录一下我查看Android源码的网站,同时也可以帮助一下大家点击查看是我经常在用的网站。可以从左侧选择不同版本的Android源码查看然后输入搜索内容,就可以看到自己想看到的源码了

2021-08-08 19:59:12 755

原创 Android音视频——NuPlayer框架

如标题所说,接下来讲的是NuPlayer,不知道对这个,大家了解多少呢。Android2.3时引入流媒体框架,而流媒体框架的核心是NuPlayer。在之前的版本中一般认为LocalPlayback就用Stagefrightplayer+Awesomeplayer,流媒体用NuPlayer。Android4.0之后HttpLive和RTSP协议开始使用NuPlayer播放器,Android5.0(L版本)之后本地播放也开始使用NuPlayer播放器。Android7.0(N版本)则完全去掉了Aweso

2021-08-08 19:47:43 1480

原创 Android音视频——MediaPlayerService

MediaPlay一定不少人都知道,那MediaPlayerService呢?有多少人了解过呢,MediaPlayerService和MediaPlayer直接到关系是什么?那么接下来带着这些疑问往下看MediaPlayer是客户端,是Android自带的一个多媒体播放类,这个在Android音视频——系统播放器介绍(一)里有详细介绍过,大家不了解的可以看一下。MediaPlayerService和MediaPlayerService::Client是服务器端。MediaPlayerService实现

2021-08-01 00:04:09 855

原创 Android音视频——系统播放器介绍(三)

常用监听器开发者可以设置一些监听器,监听MediaPlayer的状态,错误事件等等。开发者应在同一个线程中创建MediaPlayer与设置的监听器。setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener)监听MediaPlayer准备完成。一般与prepareAsync配合使用。setOnVideoSizeChangedListener(android.media.MediaPlayer.OnVideoSizeCha

2021-07-28 20:53:23 575

原创 Android音视频——系统播放器介绍(二)

在上文Android音视频——系统播放器介绍(一)中,介绍到了状态,但是没有详细讲解,本篇就为大家带来MediaPlayer状态涉及到的方法。此图是官方图例椭圆代表MediaPlayer可能停留的状态。椭圆之间的箭头表示方法调用,状态切换的方向。单箭头表示方法同步调用,双箭头表示异步调用。从图中我们可以看出MediaPlayer的状态切换和涉及到的方法。Idle-End当new一个MediaPlayer或者调用了reset函数,当前MediaPlayer会处于Idle状态。调用release后,

2021-07-27 21:14:43 514

原创 Android音视频——系统播放器介绍(一)

相信大家看到这个标题就能想到,本篇讲的是什么播放器了,没错就是MediaPlayer。分享一首动听的纯音乐Shut The Window!相信有不少人都用过它,但是有少人是只停留在用的阶段呢,下一篇文章会接着详细介绍各个状态下的生命周期,本篇对新人友好一点,先简单讲一下相关知识点及调用。什么是MediaPlayerMediaPlayer是Android自带的一个多媒体播放类,它可以用来播放音视频文件,或者是音频文件,我们可以用它来播放本地音频,或者是网络在线音频。属于 android.media

2021-07-25 11:20:51 1174 5

原创 Android音视频——相关概念

在学习Android音视频里,讲过音视频数据从哪里来,怎么获取,其实无论在哪个平台,图 像、视频最初都 是来自摄像头,而音频最初都是来自麦克风,相较于视频,其实音频是更不易于观察,那么你们知道麦克风是如何采集声音的吗许嵩-有何不可麦克风里面有一层碳膜,非常薄而且十分敏感。声音其实是一种纵波,会压缩空气也会压缩这层碳膜,碳膜在受到挤压时也会发出振动,在碳膜的下方就是一个电极,碳膜在振动的时候会接触电极,接触时间的长短和频率与声波的振动幅度和频率有关,这样就完成了声音信号到电信号的转换。之后再经过放大电路

2021-07-23 18:23:03 614

原创 Android音视频——基础介绍

视频编码视频编码所谓的视频编码就是指通过特定的压缩技术,将某个视频格式文件转换成另一种视频格式文件的方式。视频流传输中最重要的编解码标准有国际电联的 H.261、H.263、H.264,运动静止图像专家组的 M-JPEG 和国际标准化组织运动图像专家组的 MPEG 系列标准,此外在互联网上被广泛应用的还有 Real-Networks 的 RealVideo、微软公司的 WMV 以及 Apple 公司的QuickTime 等。视频编码分为两个系列,分别介绍如下。MPEG :(由 ISO[国际标准化组织]

2021-07-22 21:16:45 515 3

原创 想学习Android音视频,这些你知道吗?

相信不少小伙伴们工作一段时间都想如何进阶?很多一直做的都是应用层的APP开发,实现的基本都是UI效果,动画,机型适配,然后集成第三方的lib进行推送,支付,第三方登录,地图等的功能等等需求,如何学一点更深层次的东西?不少小伙伴说,不妨去学一下新的语言,学学后端技术,我身边也有不少这样的人,但我认为无论什么平台,他们的学习曲线其实是类似的,都要经历差不多的环节,学习对应平台的编程语言后熟悉对应平台提供的 API,再掌握平台相关的特性、框架和原理,再通过项目去熟悉接下来就是对音视频感兴趣的朋友们,可以看一

2021-07-14 23:49:25 438 1

转载 京东Android APP HarmonyOS 开发实践!

以下文章来源于京东零售技术 ,作者侯伟浩 狄彩林原文链接京东鸿蒙版来了〜背景随着鸿蒙2.0的发布,华为部分手机用户迎来鸿蒙时代,京东作为华为鸿蒙OS的合作APP,首次投入鸿蒙应用商用版开发,目前已上架V10.0.2版本。鸿蒙OS特性2021年6月3日,华为举行了鸿蒙OS2.0发布会。鸿蒙OS带来了全新桌面及用户体验,如桌面图标支持上滑呼出快捷卡片,原子化能力能通过鸿蒙设备间流转实现快速分享、显示,以及统一控制中心(手势:右上角下滑)、服务中心(手势:屏幕左下角或右下角向侧上方滑动)等。And

2021-06-30 21:30:19 2438 1

原创 怎么使用Java开发HarmonyOS

开发准备本文适用于HarmonyOS应用开发的初学者。通过构建一个简单的具有页面跳转功能的应用(如下图预览器运行效果所示),熟悉HarmonyOS应用开发流程。HarmonyOS提供了两种FA(Feature Ability)的UI开发框架:Java UI框架和JS UI框架。Java UI框架提供了细粒度的UI编程接口,UI元素更丰富,使应用开发更加灵活。JS UI框架提供了相对高层的UI描述,使应用开发更加简单。官网文档详细信息但其实有过Java基础的,上手肯定是容易一些的,配置开发环境

2021-06-28 22:04:42 813 4

原创 HarmonyOS的定义是什么?

最近鸿蒙os真的是在各大社交平台占足了风头,身边好多小伙伴在讨论这个,也许是因为它是中国摆脱其他国家手机系统制裁的第一步相信好多人都好奇鸿蒙是什么?很多人是不是都在发问,一夜之间就火了的鸿蒙有何独特?有没有小伙伴去官网看了后还是一脸懵逼的0.0我查阅资料后,整理了一下,如下文所示华为自有开源操作系统鸿蒙OS,鸿蒙OS凭借多终端开发IDE,多语言统一编译,分布式架构Kit提供屏幕布局控件以及交互的自动适配,支持控件拖拽,面向预览的可视化编程,从而使开发者可以基于同一工程高效构建多端自动运行App

2021-06-06 14:48:38 4236

Preview.zip

PhotoView+Viewpager切换下一页前一页恢复原本大小,可同时预览图片和视频,滑动后视频自动暂停,图片恢复默认大小,网络连接和本地均可.

2020-04-27

USBCamera.zip

1.支持USB Camera设备检测,画面实时预览 2.支持jpg格式图片抓拍 仅提供了基础的功能,大家需要的功能可以根据需求进行自行添加

2020-04-13

Android设备读写公交卡等NFC卡片

基于Android Studio的工程,实现了公交卡数据,交易信息,基本信息的读取,解码。

2019-01-18

微信小程序使用md5加密(支持中文)

支持中文的md5加密,下载好直接放在项目中,新建md5.js文件,直接复制到项目的utils/md5.js即可

2018-12-22

AnAdroid底部导航——BottomNavigationView

结合ViewPager、Fragment实现的一个流行UI布局,并用反射解决ViewPager与BottomNavigationView侧滑联动时的一个小问题

2018-10-16

自定义view:打造Andrid3D画廊

网上有很多关于使用Gallery来打造3D画廊的博客,但是做出来的效果我不是很满意,有些许卡顿,索性就选择了viewpager来做,效果一定不会让大家失望,具体介绍请看https://blog.csdn.net/qq_25749749/article/details/82777226

2018-09-20

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除