自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(310)
  • 资源 (15)
  • 收藏
  • 关注

原创 Android踩坑小记(持续更新)

点9图的非内容区域也是会占用实际宽高的.点9图的上边和左边是限定拉伸区域,下边和右边是限定内容显示区域. 在上图中内容的限制区域刚好是白色的圆角矩形内容,而用红色框框框住的这些距离其实是非内容区域, 但是如果使用该点9图的话,这些非内容区域其实也是占据空间的,也就是说就算你布局中没有设置任何的margin值,但是任然会看到该View距离四周有一点距离.2019/1/23..................

2019-01-23 11:14:22 2734 1

原创 Android实用小技巧(持续更新)

文章目录给drawableRight设置点击事件限制EditText可输入的字数,超出后提示文案解决RecycleView布局中GridLayoutManager和StaggeredGridLayoutManager添加头部和底部不占用一行的问题解决由于RecyclerView有刷新头存在,导致canScrollVertically(-1)时始终返回true的bug获取RecycleView第一个和最后一个可见Item的位置修改RadioButton的drawableRight图片与文字相隔的距离太大,导致

2019-01-03 17:31:03 2565 1

原创 十五、redis的使用

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色官网介绍不支持SQL语法不支持事务。

2023-10-30 18:26:01 269

原创 十四、Django框架使用

Django是劳伦斯出版集团的开发人员为开发新闻内容网站而设计出来的一个软件,它遵循MVC思想,但是有自己的一个名词,叫做MVT。Django遵循快速开发和DRY原则。Do not repeat yourself.不要自己去重复一些工作。它提供了许多有用的工具和功能,使开发者能够轻松地构建高度可拓展、安全、高性能的 Web 应用。强大的路由系统:Django 提供了易于配置和管理 URL 路由的功能,使开发者能够定义页面和应用程序的 URL 映射。

2023-10-19 19:39:43 676

原创 十三、前端开发知识快速入门

目录一、HTML概述和基本结构1.1 概述1.2 基本结构1.3 html文档类型1.4 html注释二、HTML常用标签2.1 块标签2.2 行内标签2.3 字符实体2.4 图片标签2.5 链接标签2.6 列表标签2.7 表单2.8 表格三、页面布局四、CSS样式4.1 基本语法和页面引用4.2 文本样式设置4.3 颜色表示法4.4 选择器1. 标签选择器2. id选择器3. 类选择器4. 层级(后代)选择器5. (群)组选择器6. 属性选择器7. 父子选择器8. 相邻兄弟选择器9. 伪类及伪元素选择器4

2023-10-11 18:51:59 365

原创 十二、元类和ORM的实现

元类的主要目的就是为了当创建类时能够自动地改变类。假设你想让你的模块里所有的类的属性都是大写形式。有好几种方法可以办到,但其中一种就是通过在模块级别设定__metaclass__。采用这种方法,这个模块中的所有类都会通过这个元类来创建,我们只需要告诉元类把所有的属性都改成大写形式就万事大吉了。幸运的是,__metaclass__实际上可以被任意调用,它并不需要是一个正式的类。所以,我们这里就先以一个简单的函数作为例子开始。(1) Python2中# class_name 会保存类的名字 Foo。

2023-10-11 12:04:17 174

原创 十一、WSGI与Web框架

WSGI(Web Server Gateway Interface)并不是一个具体的框架,而是一个用于连接Web服务器和Web应用程序的标准接口规范。WSGI的设计目的是使Web服务器和Web应用程序之间的通信更加简单和通用化。它是为各种Python web框架提供统一的接口标准。Flask:一个轻量级的Web框架,使用WSGI作为其底层服务器接口。Django:一个完整的Web框架,也是使用WSGI标准与Web服务器进行通信。Pyramid:一个灵活的Web框架,也是基于WSGI标准构建的。

2023-10-10 15:30:50 206

原创 十、pygame小游戏开发

子弹 从 英雄 的正上方发射 沿直线 向 上方 飞行飞出屏幕后,需要从 精灵组 中删除Bullet —— 子弹初始化方法指定 子弹图片初始速度 = -2 —— 子弹需要向上方飞行重写 update() 方法判断 是否飞出屏幕,如果是,从 精灵组 删除在 plane_sprites 新建 Bullet 继承自 GameSprite# 判断是否超出屏幕,如果是,从精灵组删除。

2023-10-07 20:53:05 259

原创 九、闭包和装饰器

在 Python 中,当我们在一个嵌套函数内部定义一个同名的变量时,默认情况下,Python 会将这个变量视为一个新的本地变量,而不是引用外部的变量。这样做的原因是,通过这种多层的嵌套结构,我们可以在外层函数中接受装饰器的参数,并将这些参数传递给内层的装饰器函数。在这种情况下,我们需要定义一个装饰器函数,它接受任意个数和类型的参数,并返回一个内部函数,该内部函数代替原始函数的执行。如果我们需要在装饰器中使用参数,那么我们需要在装饰器函数的外层定义一个接受参数的函数,然后在内层定义真正的装饰器函数。

2023-07-03 14:51:12 217

原创 八、MySql的使用

例如,在一个员工表中,每个员工都有一个经理,该经理也是该表中的员工,这意味着每个员工行的 manager_id 列将引用该表中另一行的 id 列(即 manager_id 是外键,参照该表的 id 列)。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。在数据库表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束等.

2023-07-01 16:25:15 467

原创 七、正则表达式

在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为re。

2023-04-17 18:02:16 463 1

原创 六、多任务处理

target:如果传递了函数的引用,子进程就执行这里的代码args:给target指定的函数传递的参数,以元组的方式传递kwargs:给target指定的函数传递字典数据类型name:给进程设定一个名字,可以不设定group:指定进程组,大多数情况下用不到start():启动子进程实例(创建子进程)is_alive():判断进程子进程是否还在活着join([timeout]):等待子进程执行结束,或等待多少秒terminate():不管任务是否完成,立即终止子进程。

2023-04-07 11:20:26 514

原创 五、socket的使用

TCP协议,传输控制协议(Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。TCP通信需要经过创建连接、数据传送、终止连接三个步骤。面向连接通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。双方间的数据传输都可以通过这一个连接进行。完成数据交换后,双方必须断开此连接,以释放系统资源。

2023-03-23 11:08:30 1935

原创 四、文件的基本操作

read 方法默认会把文件的 所有内容 一次性读取到内存,如果文件太大,对内存的占用会非常严重, 可以使用readline 方法来逐行读取。在 Python 2.x 文件的 第一行 增加以下代码,解释器会以 utf-8 编码来处理 python 文件。文本文件存储的内容是基于 字符编码 的文件,常见的编码有 ASCII 编码,UNICODE 编码等。打开文件,并且返回文件对象, 此外open函数的第二个参数可以支持文件操作的权限模式。第一次打开 文件时,通常文件指针会指向文件的开始位置。

2023-03-20 20:14:44 564

原创 三、模块、包和异常

可以看到安装的模块被导入到/opt/homebrew/lib/python3.9/site-packages目录内, 进入该目录也可以查看到新安装的模块。.py,包名的 命名方式和变量名一致,小写字母 + _,使用 import 包名 可以一次性导入 包 中 所有的模块。import *的方式导入某个模块的所有内容,因为函数重名并没有任何的提示,出现问题不好排查。程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常。import 的方式。

2023-03-06 12:06:25 857

原创 二、面向对象的使用

class 类名 : def 方法 1(self , 参数列表) : pass def 方法 2(self , 参数列表) : pass方法 的定义格式和之前学习过的函数 几乎一样,区别在于第一个参数必须是 self,稍后会介绍 self注意类名 的 命名规则 要符合 大驼峰命名法调用类的方法时,不需要传递 self 参数class Cat : """这是一个猫类""" def eat(self) : print("小猫在吃鱼") def drink(self) : print("小猫在喝水")在。

2023-03-06 11:07:30 577

原创 一、Python基础语法

在 Python 中,每个变量 在使用前都必须赋值,变量 赋值以后 该变量 才会被创建# 定义 qq 号码变量 qq_number = "1234567" # 定义 qq 密码变量 qq_password = "123" # 在程序中,如果要输出变量的内容,需要使用 print 函数 print(qq_number) print(qq_password)

2023-03-05 14:45:35 779

原创 Android LruCache

当调用put()方法时,就会在集合中添加元素,并调用trimToSize()判断缓存是否已满,如果满了就用LinkedHashMap的迭代器删除队首元素,即近期最少访问的元素。当调用LruCache的get()方法获取集合中的缓存对象时,就代表访问了一次该元素,将会更新队列,保持整个队列是按照访问顺序排序。有以上结果可以看出,这个设置为true时,如果对一个元素进行了操作(put,get),就会把那个元素放到集合的最后,设置为false时,无论怎么操作,集合元素的顺序都是按照插入的顺序来进行存储的。

2022-09-23 20:55:06 1960

原创 Linux进程操作

目录一、进程和程序相关概念1.1 进程的状态转化二、环境变量2.1 getenv/setenv/unsetenv函数三、创建进程3.1 fork函数3.2 getpid/getppid函数3.3 创建n个子进程3.4 循环创建子进程并控制顺序四、进程的控制命令五、父子进程共享内容的操作原则六、exec族函数介绍6.1 execl函数6.2 execlp七、孤儿进程和僵尸进程7.1 孤儿进程7.2 僵尸进程八、进程回收8.1 wait函数8.2 waitpid8.3 用wait回收多个子进程8.4 用wait

2022-03-15 20:46:43 1481 1

原创 Linux文件操作

目录一、系统api与库函数的关系二、open和close函数介绍2.1 open方法介绍2.2 close方法介绍三、open/create函数创建文件时的权限设置四、read和write函数的介绍和使用4.1 read函数介绍4.2 write函数介绍4.3 如何使用五、lseek函数的介绍和使用5.1 介绍5.2 如何使用六、阻塞和非阻塞相关概念6.1 fcnl函数七、Linux最大文件打开数7.1 修改单个进程的最大文件句柄7.2 修改系统所有进程的文件局柄八、stat函数介绍和使用8.1 通过sta

2022-03-11 20:36:51 3296 1

原创 C开发编译与调试

目录一、gcc编译流程1.1 预处理阶段1.2 预编译阶段1.3 汇编阶段(最耗时)一、gcc编译流程1.1 预处理阶段宏定义展开,宏定义替换,展开include的文件gcc -E -o hello.i hello.c例如源文件hello.c内容如下:#include <stdio.h>int main(){ printf("hello test"); return 0;}经过预处理后生成的hello.i内容如下:# 1 "hello.c"# 1 "<bu

2022-03-08 22:28:22 1007

原创 C数据结构

目录一、动态数组二、单向链表2.1 链表逆序三、栈3.1 顺序存储一、动态数组所谓动态数组就是可以自动扩容的数组, 例如:#include <stdio.h>#include <stdlib.h>#include <string.h>//动态数组struct DynamicArray{ //数组存储元素的空间首地址,存放的都是地址void* void **addr; //最大容量 int capacity; //实

2022-02-26 23:16:31 933

原创 C基础补充

目录1.结构体使用typedef起别名的2种方式2.void类型和void*类型的区别3.struct成员不允许在定义时初始化4.sizeof操作符的注意事项5.指针步长的操作6.操作已回收的栈变量地址的问题7.形参不能修改实参的问题8.全局变量或者函数必须要先声明再使用9.const全局变量和const局部变量的区别10.宏函数与普通函数的区别11.正确认识字符串及数组的首地址12.获取结构体成员的地址偏移量13.字符串拷贝的几种方式1.结构体使用typedef起别名的2种方式typedef起别名的作

2022-02-17 21:11:59 500

原创 C基础(七)文件操作

目录一、文件的打开和关闭1.1 fopen函数1.2 fclose函数二、读取和写入字符2.1 getc函数2.2 putc函数2.3 案例-实现控制台输入文件名创建文件并支持写入功能2.4 案例-实现控制台输入文件名读取该文件的内容2.5 案例-实现echo的功能2.6 案例-实现文件拷贝的命令2.7 实现文件加解密2.8 EOF与feof函数文件结尾三、读取和写入一行文本3.1 fprintf和fscanf函数3.2 案例-将用户控制台输入的内容打印到文件中3.3 fgets和fputs函数3.4 案例

2022-02-14 10:57:53 602

原创 javassist使用指南

目录一、快速入门1.1 创建class文件1.2 ClassPool的相关方法1.3 CtClass的相关方法1.4 CtMethod的相关方法1.5 调用生成的类对象1.5.1 通过反射调用1.5.2 通过接口调用1.6 修改现有的类对象二、将类冻结三、类搜索路径四、$开头的特殊字符五、ProxyFactory的使用我们知道Java字节码以二进制的形式存储在class文件中,每一个class文件包含一个Java类或接口。Javaassist 就是一个用来处理Java字节码的类库。在Javassist 中

2022-02-13 01:38:37 8296

原创 C基础(六)结构体

目录一、结构体struct的定义和.操作符的使用二、 结构体的创建和初始化三、结构体的内存对齐模式3.1结构体强转其他类型四、指定结构体元素的位字段(bit)五、结构数组5.1 结构体数组的冒泡排序六、结构体嵌套七、结构体的赋值八、箭头操作符 ->的使用九、指向结构体数组的指针十、结构体中的数组成员和指针成员十一、在堆中创建结构体十二、结构体作为函数的参数12.1将结构体作为函数的参数12.2 将结构指针作为函数参数十三、案例-使用结构体动态接收控制台输入参数十四、思考:结构体的成员到底在栈还是堆?

2022-02-10 16:20:53 1948

原创 C基础(五)作用域和内存管理

目录一、作用域1.1 作用域和生命周期二、内存区域划分三、堆内存的分配和释放3.1 malloc分配堆内存3.2 free释放堆内存3.3 思考:解决函数返回值是指针的问题方案一: 返回一个在堆内存分配的地址指针变量方案二: 在函数调用处定义自变量3.4 思考:局部静态变量和常量所指向的地址的值出了作用域还能访问吗?3.5 案例:使用堆内存解决strcat追加字符串无法提前预知内存大小的申请问题3.6 calloc分配指定大小的堆内存3.7 realloc重新分配新的堆内存3.8 正确处理函数内分配堆内存的

2022-02-09 18:24:22 786

原创 C基础(四)指针的使用

目录一、一级指针1.1 指针变量的定义1.2 &取地址运算符二、二级和多级指针一、一级指针指针也是一个变量,指针存放的内容是一个内存地址,该地址指向一块内存空间。1.1 指针变量的定义一级指针变量的数据类型会在基本数据了类型之后多了一个*号,指针变量只能存放内存地址(一个16进制的数),不能将一个基本数据类型直接赋值给一个指针变量。如果要取出一级指针变量指向的内存地址所对应的值的话,可以通过在指针变量前加一个*号来获取int *p;//表示定义一个指针变量p, 类型是int *;*p;

2022-01-28 20:19:57 1065

原创 C基础(三)函数的使用

目录一、库函数的使用1.1 随机数rand与srand1.2 scanf函数1.3 gets函数1.4 fgets函数1.5 puts函数1.6 strlen函数1.7 strcat函数和strncat函数1.8 strcmp和strncmp1.9 strcpy和strncpy1.10 sprintf函数1.11 sscanf函数1.12 strchr和strstr函数1.13 strtok函数1.14 atoi和atof,atoll函数二、自定义函数2.1 函数的形参与实参2.2函数的返回类型与返回值2.

2022-01-27 22:58:51 504

原创 C基础(二)数组和字符串的使用

目录一、一维数组1.1 数组的定义1.2 数组的初始化1.3 获取数组的长度1.4 案例-查找数组最大值1.5 查找数组第二大元素1.6 数组逆置1. 7 冒泡排序二、二维数组2.1 二维数组的定义2.2 二维数组的初始化和取值三、三维数组一、一维数组数组在内存中就是一段连续的空间,每个元素的类型是一样的1.1 数组的定义数组下标从0开始,数组的名字是一个常量,如果直接输出数组的名字得到的结果就是数组中第一个元素的地址int array[10];//定义一个一维数组,名字叫array,一共有10个

2022-01-25 22:47:54 439

原创 C基础(一)数据类型、进制、运算符、语句

目录一、常量1.1 宏常量1.2 const常量1.3 字符串常量1.4 整数常量二、十进制与二进制2.1 十进制,二进制,八进制,十六进制的关系2.2 二进制与八进制和16进制的关系2.3 十进制数转换为2进制的技巧三、原码反码与补码3.1 原码推算补码的方式3.2 补码推算原码的方式四、sizeof关键字的使用4.1 有符号和无符号的区别4.2 整数的溢出五、大端对齐与小端对齐六、char类型6.1 格式说明符中的类型七、浮点类型7.1 小数的四舍五入八、运算符8.1 ++和--运算符8.2 逗号运算符

2022-01-24 23:18:27 552

原创 Android自定义View(三) Scroller与平滑滚动

目录一、什么是Scroller二、认识scrollTo和scrollBy方法2.1 scrollTo、scrollBy对View内容的影响2.2.1 思考为什么移动负数距离会向坐标正方向移动?2.2 scrollTo、scrollBy对布局容器的影响三、Scroller类3.1 相关方法介绍3.2 scroller的基本使用3.3 平滑滚动的工作原理四、案例-触摸滑屏4.1 触摸滑屏技术分析4.2 速度追踪器VelocityTracker4.3 触摸滑屏的分步实现一、什么是ScrollerScrolle

2022-01-24 00:02:11 3987

原创 Android自定义View(二) 自定义容器

目录一、什么是自定义容器1.1 ViewGroup类1.2 ViewGroup的工作原理1.2.1 ViewGroup的onMeasure分析1.2.2 ViewGroup的onLayout分析1.2.3 ViewGroup的onDraw分析二、综合案例2.1 CornerLayout布局2.1.1 分析容器的宽高2.1.2 分析容器的内边距2.1.3 分析子View的外边距2.1.4 重写CornerLayout的onMeasure方法确定容器的宽高2.1.5 重写CornerLayout的onLayo

2022-01-23 22:34:29 2367

原创 Android自定义View(一) 基础篇

目录一、基本结构1.1 重写onMeasure 方法一、基本结构组件主要由两部分构成:组件类和属性定义。我们从第一种定义方式说起创建自定义组件类最基本的做法就是继承自类 View,其中,有三个构造方法和两个重写的方法又是重中之重。下面是自定义组件类的基本结构:public class MyView extends View { public MyView(Context context) { super(context); } public MyView(Co

2022-01-23 18:02:53 2695

原创 Android绘图(四)阴影、渐变和位图运算处理

目录一、阴影1.1 案例-为文字添加阴影和发光效果二、 渐变2.1 线性渐变(LinearGradient)本章将向您介绍阴影、渐变和位图运算等技术。阴影只是一个狭义的说法,实际上也包括发光等效果;Android 也供了强大的渐变功能,渐变能为物体带来更真实的质感,比如可以用渐变绘制一颗五子棋或一根金属圆棒;位图运算就更有趣了,Android 为 Bitmap 的运算供了多达16 种运算方法,获得的结果也不尽相同。不过,主要还是在于灵活应用。一、阴影可以为文字和图形指定阴影(Shader)。在绘图

2022-01-20 21:36:32 3427

原创 Android绘图(三)双缓存技术

一、概述什么叫“双缓存”?说白了就是有两个绘图区,一个是 Bitmap 的 Canvas,另一个就是当前View 的 Canvas。先将图形绘制在 Bitmap 上,然后再将 Bitmap 绘制在 View 上,也就是说,我们 在 View 上看到的效果其实就是 Bitmap 上的内容。这样做有什么意义呢?概括起来,有以下几点:1)高绘图性能先将内容绘制在 Bitmap 上,再统一将内容绘制在 View 上,可以提高绘图的性能。2)可以在屏幕上展示绘图的过程将线条直接绘制在 View 上和先绘

2022-01-19 10:54:42 2133

原创 Android绘图(二)使用 Graphics2D 实现动态效果

一、View的invalidate方法介绍View 类定义了一组 invalidate()方法,该方法有好几个版本:public void invalidate()public void invalidate(int l, int t, int r, int b)public void invalidate(Rect dirty)invalidate()用于重绘组件,不带参数表示重绘整个视图区域,带参数表示重绘指定的区域。如果要去追溯该方法的源码,大概就是将重绘请求一级级往上交到 ViewRoo

2022-01-17 10:49:28 2162

原创 Android绘图(一)基础篇

目录一、绘图入门二、绘制位图三、绘制点四、绘制直线五、绘制矩形六、绘制圆七、绘制路径7.1 往 Path 中添加线条7.2 往 Path 中添加矩形、椭圆、弧7.3 往 Path 中添加曲线和贝塞尔曲线7.4 将 Path 中的图形进行运算7.5 绘制文字7.5.1 在指定位置绘制文本八、Paint的FontMetrics使用8.1 行距8.2 计算fontPadding8.3文本在控件水平方向居中显示8.4 文本在控件垂直方向居中显示8.5 Paint的setTextAlign使用九、绘制验证码一、绘图

2022-01-15 15:02:05 7032

原创 双系统在重装win8后无法进入ubuntu引导,怎么修复?

修复双系统引导

2022-01-02 22:48:43 2966 3

原创 LiveData的工作原理分析

文章目录一、简介二、数据监听源码分析2.1 LiveData的observer方法分析2.2 LifecycleBoundObserver源码分析2.3 ObserverWrapper源码分析2.4 LifecycleEventObserver接口分析三、数据发送源码分析3.1 LiveData的postValue/setValue方法分析3.2 LiveData的dispatchingValue方法分析3.3 LiveData的considerNotify方法分析四、LiveData的粘性事件4.1 何为

2021-06-20 21:26:34 527 1

Okhttp3的封装2

详情 https://blog.csdn.net/mChenys/article/details/103160025

2019-11-21

HttpManager.java

详情https://blog.csdn.net/mChenys/article/details/103160025

2019-11-20

HttpManager.java

详情查看https://blog.csdn.net/mChenys/article/details/92721013

2019-06-18

Glide库封装

https://blog.csdn.net/mchenys/article/details/51635535

2018-04-18

RecycleView实现拖拽交换item位置

http://blog.csdn.net/mChenys/article/details/55259510

2017-02-16

整合Camera和MediaRecorder实现拍照和录像

整合Camera和MediaRecorder实现拍照和录像

2017-01-26

emoji表情的使用

详情:http://blog.csdn.net/mchenys/article/details/52823662

2016-10-15

修改状态栏颜色

详情链接:http://blog.csdn.net/mChenys/article/details/52768221

2016-10-09

Android自制弹幕

详情:http://blog.csdn.net/mChenys/article/details/52704078

2016-09-30

自定义弹幕

自定义弹幕

2016-09-29

通过BaseHolder的方式展示数据

详情描述:http://blog.csdn.net/mchenys/article/details/50569480

2016-01-29

Android自制侧滑菜单

详情描述:http://blog.csdn.net/mchenys/article/details/50321795

2016-01-29

Android自制带刷新的ListView

支持下拉刷新,滚动加载,滚动加载失败时支持点击重新加载,无更多数据时显示没有更多数据

2016-01-29

Android自制手机相册

类似手机相册一样可以浏览相册,查看相册内的所有相片,点击相片查看详情,支持缩放平移方式浏览.

2016-01-29

下拉刷新和滚动加载ListView

详情http://blog.csdn.net/mchenys/article/details/50224979

2015-12-19

空空如也

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

TA关注的人

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