自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(127)
  • 资源 (8)
  • 收藏
  • 关注

原创 Android Jetpack 概述(系列入口)

本文系统梳理了Android Jetpack核心组件及其学习路径。架构组件(Lifecycle/ViewModel/LiveData)是基础,用于管理UI生命周期和数据驱动;Room和DataStore处理数据持久化;UI组件(Navigation/Paging/Compose)优化界面交互;WorkManager等处理后台任务。建议从官方文档入手,按"架构基石→数据持久化→界面交互→后台任务"的顺序学习,先掌握MVVM模式下的基础组件(Lifecycle-ViewModel-LiveD

2026-01-06 19:45:29 1362

原创 Android 项目:画图白板APP开发(系列入口)——功能介绍(笔锋,分页,缩放,多指,硬件加速等)

本系列将全面的介绍一些有关Android 画图方面的知识。笔触功能包括:颜色、粗细、透明度、笔锋、橡皮;绘图功能包括:分页、缩放、多指、撤销恢复、笔画加速。别看功能这么多,简单的部分会花较少篇幅介绍,着重会讲解复杂功能的实现。这一章只展示效果,后续文章会逐步实现本章介绍的功能。

2025-08-09 18:05:45 411

原创 C语言基础笔记4【个人用】

本文系统介绍了C语言的核心编程技术,包括预处理器指令、头文件机制、类型转换、错误处理和内存管理五大模块。预处理器部分详细讲解了宏定义、条件编译和文件包含等关键功能;头文件章节阐述了接口声明和代码共享的实现方式;类型转换内容涵盖基本语法和指针转换等进阶用法;错误处理模块分析了返回值、全局变量等常见策略;内存管理部分则深入解析了malloc、calloc、realloc等动态内存操作函数及其应用场景。全文通过丰富的代码示例,全面展示了C语言底层编程的核心技术要点,为开发者提供了实用的编程参考指南。

2026-05-26 15:58:47 496

原创 C语言基础笔记3【个人用】

本文摘要: C语言核心知识点总结,涵盖字符串、结构体、共同体、位域、typedef及输入输出操作。字符串部分详解定义初始化、可修改性及常用函数;结构体重点讲解声明方式、成员访问、指针使用及内存对齐;typedef用于简化类型声明;输入输出部分对比不同函数特性,强调安全性差异。特别指出gets()函数因安全隐患已被废弃,推荐使用fgets()替代。全文提供丰富代码示例,帮助理解各知识点的实际应用场景和注意事项。

2026-05-20 18:51:55 524

原创 C语言基础笔记2【个人用】

摘要:C语言核心概念(函数、数组、枚举、指针)本文档系统性地讲解了C语言的四个核心主题:函数、数组、枚举和指针。一、函数函数是代码封装与复用的基本单元。声明与定义:声明(原型)告知编译器函数签名,定义提供具体实现。参数名可省略。分类:分为C标准库提供的库函数(如printf)和程序员编写的自定义函数。参数传递:C语言只有值传递。传递普通变量时,形参改变不影响实参;传递指针(地址)时,可通过间接访问修改实参,实现“引用传递”效果(如swap函数)。二、数组数组是存储相同类型数据的连续

2026-05-18 16:31:48 554

原创 C语言基础笔记1【个人用】

本文介绍了C语言的基础语法和程序结构。首先通过"Hello World"示例讲解了C程序的基本组成,包括预处理指令、主函数、注释和输出语句。然后详细说明了C语言的数据类型(整型、浮点型、字符型等)、变量定义与初始化、常量声明方式(#define和const)以及存储类(auto、register、static、extern)。接着介绍了各种运算符(算术、关系、逻辑、位运算等)及其优先级。最后讲解了流程控制语句,包括条件判断(if-else、switch-case)、循环结构(while、

2026-05-12 16:09:18 646

原创 Java 基础学习笔记【个人用】

本文摘要: Java开发环境搭建指南,包括JDK安装配置和IDEA使用教程。详细介绍了JDK环境变量设置方法、IDEA常用快捷键和调试技巧。涵盖Java基础语法:变量定义规则、8大基本数据类型、运算符使用、条件判断语句(if/switch)和循环结构(while/for)。重点讲解了变量命名规范、数据类型转换注意事项以及递增递减运算符的区别。同时提供了IDEA的代码格式化、注释、断点调试等实用功能说明,适合Java初学者快速掌握开发环境配置和基础编程知识。

2026-05-08 18:19:17 659

原创 Android WorkManager 全面讲解

Android WorkManager 是 Jetpack 组件库中用于处理后台任务的框架,具有以下核心特性: 任务定义与调度 通过 Worker 类定义任务逻辑 使用 WorkRequest 配置任务类型(一次性/周期性)、约束条件和输入数据 WorkManager 根据设备状态智能选择最佳执行方式 高级功能 支持任务链和并行执行 提供任务状态实时监控 具备灵活的任务取消机制 支持数据传递(最大10KB) 适用场景 网络请求、数据同步等后台任务 需要持久化执行的作业 设备重启后仍需完成的工作 WorkMa

2026-05-06 18:09:42 705

原创 Android Navigation 组件全面讲解

Android Jetpack Navigation组件使用指南 摘要:Navigation是Android Jetpack的核心组件,用于简化应用内导航逻辑。本文详细介绍了Navigation的基本使用方法和核心功能。主要内容包括:1)Navigation三大核心概念(导航图、宿主和控制器的关系);2)实现步骤(创建导航图XML、配置Activity和Fragment);3)核心功能如自动处理Fragment事务、安全参数传递、深层链接支持等。重点讲解了类型安全的SafeArgs参数传递、可视化导航图、集

2026-04-29 16:40:14 768

原创 Android Room 数据库详解【源码篇】

本文深入剖析了Android Room数据库框架的核心架构与实现机制。Room采用三层架构设计:接口层(开发人员接触的@Entity、@Dao等注解)、编译时生成层(自动生成的Database_Impl和Dao_Impl类)以及运行时核心层(RoomDatabase、InvalidationTracker等基础设施)。 文章详细解析了Room的编译时注解处理流程,展示了RoomProcessor如何扫描和验证@Entity、@Dao等注解,并生成对应的实现类。重点分析了Database_Impl类的构建过程

2026-04-28 15:51:22 835

原创 Android Room 数据库详解【使用篇】

Android Room数据库使用指南摘要 Room是Android Jetpack中的持久化库,提供SQLite的抽象层,包含三大核心组件:Entity(实体类)、DAO(数据访问接口)和Database(数据库类)。本文详细介绍了Room的使用方法: 配置依赖:添加Room相关库和注解处理器 创建实体类:使用@Entity定义表结构,@PrimaryKey设置主键 编写DAO接口:通过@Insert、@Update、@Delete和@Query注解实现CRUD操作 构建数据库:继承RoomDatabas

2026-04-23 17:16:03 1071

原创 Android DataBinding 全面解析【源码篇2】

本文深入解析了Android DataBinding框架中可观察数据容器的实现原理与使用方式。主要内容包括:1. 详细分析了ObservableField、ObservableInt等可观察数据容器的源码实现,解释了为何需要声明为public final;2. 探讨了BaseObservable与@Bindable注解的工作原理,以及属性级更新通知机制;3. 剖析了ObservableArrayMap/ObservableArrayList等集合类的特殊实现;4. 系统讲解了单向绑定(@{})和双向绑定(@

2026-04-20 21:41:47 878

原创 Android DataBinding 全面解析【源码篇1】

本文深入解析Android DataBinding技术的工作原理,主要分为编译期和运行期两个阶段: 编译期处理: 编译器扫描带<layout>标签的XML布局文件,自动生成对应Binding类(如ActivityMainBinding) 生成四类核心文件:BR.java(变量ID索引)、DataBinderMapperImpl.java(布局映射表)、抽象Binding类和具体实现类 通过AST分析表达式,进行类型检查和代码生成 运行期机制: 初始化时通过DataBindingUtil建立Vie

2026-04-16 23:10:28 858 1

原创 Android DataBinding 全面解析【使用篇】

本文介绍了Android DataBinding的核心概念与使用方式。主要内容包括:1. DataBinding基础概念与优势:减少样板代码、自动空安全处理、支持双向绑定等;2. 基本使用方法:从简单POJO示例到可观察对象(ObservableFields/BaseObservable)的使用;3. 绑定类型详解:单向绑定@{}、双向绑定@={}和事件绑定;4. 高级功能:通过@BindingAdapter自定义属性绑定逻辑(图片加载、视图扩展等)和@BindingConversion实现自动类型转换(颜

2026-02-15 19:10:43 1260

原创 Android LiveData 全面解析:使用Java构建响应式UI【源码篇】

本文深入解析了LiveData的核心实现机制。LiveData作为Android Jetpack中的可观察数据持有者,通过生命周期感知能力确保UI组件仅在活跃状态下接收数据更新。源码分析揭示了其关键设计:1. 数据更新采用版本号机制避免重复通知;2. 观察者包装器实现生命周期绑定;3. 线程安全的postValue/setValue方法;4. 智能分发系统处理状态变化。文章详细剖析了MutableLiveData、ObserverWrapper等核心类,以及observe()、setValue()等关键方法

2026-02-06 15:43:57 1077

原创 Android LiveData 全面解析:使用Java构建响应式UI【使用篇】

LiveData是Android Jetpack的核心组件,提供响应式数据管理能力。摘要要点:1. 核心特性:生命周期感知、自动UI更新、内存安全;2. 基础用法:通过MutableLiveData存储可变数据,LiveData暴露只读数据,使用setValue/postValue更新数据;3. 高级功能:Transformations.map/swichMap实现数据转换,MediatorLiveData合并多数据源;4. 特殊处理:SingleLiveEvent解决一次性事件重复触发问题;5. 最佳实践

2026-01-30 18:48:29 1097

原创 Android ViewModel 全面解析:从数据持有者到应用中枢的蜕变之路【源码篇】

本文深入剖析了Android Jetpack中的ViewModel组件源码实现。首先介绍了ViewModel的基本结构,包括其核心成员变量mBagOfTags和清理机制。重点分析了ViewModelProvider的三层构造函数设计,以及ViewModelStore作为容器如何通过HashMap确保ViewModel实例唯一性。文章详细讲解了ViewModel的创建流程,包括Factory工厂模式实现和缓存机制。最后阐述了ViewModel的生命周期管理原理,通过Lifecycle与Activity绑定,在

2026-01-27 11:05:07 1153

原创 Android ViewModel 全面解析:从数据持有者到应用中枢的蜕变之路【使用篇】

本文深入解析Android Jetpack中的ViewModel组件,从基本概念到高级应用。首先介绍ViewModel的核心作用:解决配置变更时的数据丢失问题,分离UI逻辑与业务逻辑。重点剖析ViewModel的生命周期特性,展示其与Activity/Fragment生命周期的关联与区别。详细讲解两种创建方式:无参数简单创建和使用Factory带参数初始化。最后通过计数器案例,对比Fragment作用域和Activity作用域下ViewModel的不同表现,演示多Fragment间数据共享的实现方案。全文贯

2026-01-23 15:50:22 1437 3

原创 Android Lifecycle 全面解析:掌握生命周期管理的艺术(源码篇)

本文详细分析了Android Jetpack中的Lifecycle组件实现原理。Lifecycle通过LifecycleOwner、LifecycleRegistry和LifecycleObserver三个核心类实现生命周期管理:1) LifecycleOwner负责提供生命周期状态;2) LifecycleRegistry作为状态管理者,采用观察者模式进行状态同步;3) LifecycleObserver接收状态变化。文章重点剖析了LifecycleRegistry的源码实现,包括状态管理机制、观察者通知

2026-01-15 11:01:15 1373

原创 Android Lifecycle 全面解析:掌握生命周期管理的艺术(使用篇)

Android Lifecycle框架通过观察者模式解决了传统生命周期管理的问题,使组件能够自主感知Activity/Fragment的生命周期变化。其核心架构包含LifecycleOwner(生命周期拥有者)、Lifecycle(状态机)和LifecycleObserver(观察者)三个组件,支持四种实现方式(DefaultLifecycleObserver推荐使用)。该框架实现了组件自我管理、与UI解耦、自动响应生命周期变化等特性,可有效防止内存泄漏,提高代码可维护性和可测试性。最佳实践包括单一职责设计

2026-01-13 19:08:30 1224

原创 Android 架构模式的演变(MVC、MVP、MVVM、MVI)

本文系统梳理了Android架构模式的演进历程,从MVC、MVP到MVVM,再到新兴的MVI模式。重点分析了每种架构的特点:MVC简单但耦合度高,MVP通过接口解耦但接口膨胀,MVVM利用数据绑定实现响应式编程,MVI则强调单向数据流和状态管理。文章指出架构演进的核心在于解决"上帝类"问题,实现职责分离、提高可测试性,并通过状态管理优化开发体验。现代架构模式如MVVM和MVI结合LiveData等组件,能更好地处理生命周期和异步操作,适应日益复杂的应用需求。

2026-01-06 19:41:55 2482

原创 Android 四大组件——ContentProvider(内容提供者)

摘要:ContentProvider是Android四大组件之一,用于实现应用间数据共享。文章详细介绍了ContentProvider的架构与工作原理,包括核心组件ContentResolver、Uri、Cursor等。重点讲解了创建ContentProvider的步骤:定义子类、实现数据库帮助类、实现CRUD方法以及在清单文件中注册。同时介绍了如何使用ContentResolver访问其他应用的数据,如读取短信和联系人等系统数据,以及通过ContentObserver监听数据变化。文章提供了完整的代码示例

2025-12-25 15:03:16 826

原创 Android 四大组件——Service(服务)【基础篇2】

本文详细分析了Android开发中前台服务(ForegroundService)和后台服务(BackgroundService)的区别与应用。前台服务具有高优先级,必须显示常驻通知,系统限制较少且不易被终止;后台服务则用户无感知,受Android 8.0+严格限制,应用进入后台后很快会被停止。文章通过Java代码示例展示了两种服务的实现方式,包括前台服务的完整实现流程(创建通知渠道、构建通知、启动服务等),并特别说明Android 10+新增的前台服务类型声明要求。针对后台服务的限制,文章建议使用WorkM

2025-12-22 18:36:14 1176

原创 Android 四大组件——Service(服务)【基础篇1】

Android服务是四大组件之一,用于后台执行长时间运行操作,无用户界面。服务分为两种启动方式:StartService启动的服务独立运行,通过stopService停止;BindService启动的服务支持双向通信,所有客户端解绑后销毁。服务生命周期包含onCreate、onStartCommand、onBind等重要回调方法,其中onStartCommand的返回值和flags参数决定了服务被杀死后的恢复行为。关键区别在于服务是Android组件,比普通线程优先级更高,适合音乐播放、文件下载等后台任务。

2025-12-18 21:03:42 1064

原创 Android 四大组件——BroadcastReceiver(广播)

本文全面解析Android四大组件之一的BroadcastReceiver。主要内容包括:1)广播接收器定义及核心设计思想,作为响应系统或应用内事件的"事件监听器";2)工作原理,包括系统匹配和执行流程;3)两种广播类型(标准广播和有序广播)及使用示例;4)两种注册方式(静态和动态);5)本地广播的优势及使用方法;6)安全考量如权限设置和exported属性;7)最佳实践,包括避免耗时操作和生命周期管理;8)常用系统广播列表。文中通过有序广播的完整示例,演示了从权限检查到最终处理的链式流

2025-11-06 17:31:28 952

原创 Android 四大组件——Activity

本文系统介绍了Android开发中Activity的核心知识。主要内容包括:Activity基础概念与生命周期(onCreate、onStart等7个回调方法);不同Activity类的区别(Activity、ActionBarActivity、AppCompatActivity);onCreate方法单双参数的区别;Activity间数据传递的注意事项;关闭所有Activity和退出应用的方法;屏幕旋转对Activity的影响及解决方案(保存状态、固定方向、ViewModel等);四种启动模式(stand

2025-10-28 16:07:12 1555

原创 Android 四大组件桥梁 —— Intent (意图) 详解

Intent(意图)是 Android 程序中在不同组件之间(如 Activity、Service、BroadcastReceiver)传递消息的对象。它可以在运行时绑定不同的组件,是组件间通信的核心。主要作用启动组件:启动一个 Activity、Service 或发送一个 Broadcast。传递数据:在组件之间携带数据。声明目标组件:可以明确指定要启动的组件,也可以只描述要执行的动作,由系统来选择合适的组件。(Intent)/(Intent):来启动一个Activity(Intent)/

2025-10-19 21:41:06 1260

原创 Android adb 基础使用指南

本文详细介绍了ADB(Android调试桥)的常用命令及其功能,涵盖设备管理、文件操作、系统调试、应用管理等多个方面。主要内容包括:1. 设备基础操作命令(连接、重启、挂载等);2. 文件目录操作与传输命令;3. 系统信息查询与进程管理;4. 网络配置与日志查看;5. 应用安装/卸载的多种方法;6. 硬件模拟与广播发送技巧。这些命令适用于Android开发调试、系统维护和自动化测试等场景,其中特别强调了需要root权限的操作和实用技巧(如快速部署、分体APK安装等)。掌握这些命令可以显著提升Android设

2025-10-14 19:11:36 1129

原创 Android studio 高效使用

Android Studio高效使用指南:从配置到快捷键 本文详细介绍了Android Studio的高效使用方法,涵盖环境配置和快捷键操作两大核心方面。在环境配置部分,重点讲解了主题选择、字体设置、代码格式规范(包括缩进、空格、换行等)、日志颜色配置和代码模板等优化技巧,帮助开发者打造舒适的编码环境。快捷键部分则系统整理了编辑、导航、重构、调试等场景下的高效操作方式,如智能补全(Ctrl+Space)、快速修复(Alt+Enter)、代码格式化(Ctrl+Alt+L)等核心快捷键。这些技巧能显著提升And

2025-10-14 11:43:19 1014

原创 Android 项目:画图白板APP开发(九)——撤销、恢复(覆盖前文所有功能)

本文详细介绍了白板APP中撤销(Undo)和恢复(Redo)功能的实现方案。系统通过定义6种操作类型(NORMAL_ONE_STROKE、SLIDING_MULTI_STROKE_HAVE/UN_HAVE、ERASER_STROKE、ZOOM_OPERATION、CLEAT_SCREEN_OPERATION),使用mCancelList和mRecoverList两个数组分别存储待撤销和待恢复的操作记录。每个操作被封装为MessageStrokes对象,包含操作类型、受影响笔画信息及变换矩阵状态。重点阐述了撤

2025-09-17 20:06:19 1125 1

原创 Android 项目:画图白板APP开发(八)——Matrix位移放大缩小(附demo)

本文介绍了Android中使用Matrix类实现图形变换(位移、缩放)的方法。Matrix是处理2D图形变换的核心类,支持缩放、旋转、平移等操作。文章详细讲解了Matrix的主要方法:setScale()、setRotate()、setTranslate()等基本变换,以及postTranslate()、postScale()等追加变换方法。通过一个白板应用Demo,展示了如何结合触摸事件实现图形的拖拽和缩放功能,其中重点处理了多指操作的中心点计算和缩放比例限制(30%-300%)。代码实现了绘图和操作两种

2025-09-15 18:53:21 1099

原创 Android 项目:画图白板APP开发(七)——多指画图操作

本文介绍了如何为画板APP实现多指触控功能。首先讲解了Android触摸事件类型,包括单点和多点触控相关事件(ACTION_POINTER_DOWN/UP)。接着详细说明了处理多点触控的关键方法,如getActionMasked()、getPointerId()等,并强调要区分索引(动态变化)和ID(固定不变)。在实现部分,通过定义数组来记录20个触控点的坐标和画笔数据,重点讲解了ACTION_POINTER_DOWN时初始化新触控点数据,以及ACTION_POINTER_UP时保存完成笔画的方法。最终实现

2025-09-12 17:50:52 1154

原创 Android 项目:画图白板APP开发(六)——分页展示

本篇将介绍如何为我们的画板应用添加功能,让用户可以。这章没有啥知识点的讲解,主要介绍一下是什么样的。

2025-09-11 19:28:57 935

原创 Android 项目:画图白板APP开发(五)——橡皮擦(全面)

本文详细介绍了在Android画图白板应用中实现橡皮擦功能的多种方法。主要包括:1)使用PorterDuff.Mode.CLEAR模式的视觉橡皮擦;2)一键清屏功能实现;3)按笔迹擦除的交互式擦除方案;4)修改Path结构的切割式橡皮擦;5)电子笔笔帽擦除支持。文章重点讲解了各种擦除方式的实现原理、核心算法(如线段相交判断、切割点计算)和代码实现细节,特别是对Path结构的处理和对撤销功能的配合支持。通过多种擦除方式的组合,可以提供更灵活、高效的绘图体验。

2025-09-10 17:29:37 1472 3

原创 Android 项目:画图白板APP开发(四)——笔锋(单 Path)

它的主要作用是对一个已有的 Path对象进行测量路径的总长度。路径上任意位置(从起点开始的距离)的坐标点 (x, y)和切线角度 (tangent)。截取原始路径的某一段,生成一个新的 Path 片段。正因为能获取到路径上每个点的精确位置和方向,它成为了实现各类轨迹动画(如飞机沿航线飞行、箭头沿曲线移动)的核心组件。网上的很多案例,可以搜索看看,我在这里对其中的方法简单介绍下。

2025-09-09 15:30:43 880 1

原创 Android 项目:画图白板APP开发(三)——笔锋(多 Path 叠加)

本文介绍了在Android应用中实现"笔锋"效果的原理和方法。"笔锋"功能通过模拟真实书写体验,根据运笔速度、方向和压力使线条产生粗细、浓淡变化。文章详细讲解了:(1)利用VelocityTracker计算速度影响线宽;(2)通过压感数据调整线宽;(3)使用二次贝塞尔曲线绘制自然流畅的线条;(4)关键算法实现笔锋效果,通过在原路径两侧添加辅助路径形成锥形过渡。实现过程涉及数学计算、路径处理和性能优化,最终能呈现类似毛笔或钢笔的真实书写效果。

2025-09-04 21:29:46 1404 1

原创 Android 项目:画图白板APP开发(二)——历史点、数学方式推导点

数学方式新增点的方法。

2025-08-14 21:00:43 947 1

原创 Android 项目:画图白板APP开发(一)——曲线优化、颜色、粗细、透明度

在移动应用开发中,画图白板类APP是一个既能展示技术实力又能带来良好用户体验的项目。今天我将分享开发这样一个APP的第一部分,重点介绍以及和的实现。

2025-08-12 20:46:48 855

原创 自定义视图:图形与图像的处理(二):绘图

Android绘图开发摘要 本文介绍了Android动态绘图的基本方法,主要包括: 通过继承View并重写onDraw()方法实现绘图功能,使用Canvas、Paint和Path三个核心类进行图形绘制。

2025-08-07 19:02:54 651

原创 自定义视图:图形与图像的处理(一):使用简单图片

Android系统提供了ImageView显示普通的静态图片,也提供了AnimationDrawable来开发逐帧动画,还可通过Animation对普通图片使用补间动画。图形、图像处理不仅对Android系统的应用界面非常重要,而且Android系统上的益智类游戏、2D游戏都需要大量的图形、图像处理。 所谓游戏,本质就是提供更逼真的、能模拟某种环境的用户界面,并根据某种规则来响应用户操作。为了提供更逼真的用户界面,需要借助于图形、图像处理。 从广义的角度来看,Android应用中

2022-06-09 14:52:40 1197 2

5.3 调用摄像头和相册——案例文档.pdf

学习调用摄像头和打开相册的简单案例

2021-07-30

菜谱app源码:参考学习用

菜谱app源码。 目前万维宜源的数据api不可用,可以换成免费的:天气数据 想学习的,对照博客观看即可,这份源码只是辅助。

2022-05-31

AndroidMPChart资源jar包

AndroidMPChart资源jar包

2022-05-13

简易视频播放器pdf文档+源码.zip

7.2-简易视频播放器的设计与实现

2021-08-29

简易音乐播放器.zip

Android软件制作,学习需要

2021-08-29

Android SQLite数据库.zip

拥有Android SQLite数据库增删改查的基本代码讲解

2021-09-01

RecyclerView.zip

想了解RecyclerView的可以免费下载了解

2021-08-11

ListView.zip

适合Android入门人群

2021-08-09

空空如也

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

TA关注的人

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