自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhangke

巧者劳,智者忧,唯无能者无所求。

  • 博客(28)
  • 资源 (9)
  • 收藏
  • 关注

原创 RxJava源码分析(2) 变换原理

RxJava源码分析基于RxJava1.3.8。在上一章节中,主要介绍了RxJava的基本使用并对该部分的源码做了详细分析。在这一章节中,将主要介绍RxJava的另一大核心功能:变换。 变换,就是将事件序列中的对象或整个序列进行加工处理,转换成不同的事件或事件序列。在RxJava中,提供了许多针对不同场景实现变换功能的操作符,如下:map() flatMap(),...

2018-05-23 23:35:34 381

原创 RxJava源码分析

RxJava源码分析基于RxJava1.3.8。 题外话: 在写这边博客之前曾犹豫过很久,因为RxJava的源码非常复杂,感觉不是在一两篇博客中就能讲解清楚。但是正式因为RxJava的源码非常复杂,我也想通过写博客的方式来加深自己对RxJava源码的认识,同时也算是做笔记了,能时不时的翻出来看看,以防止忘记。概述虽然RxJava2也发布了很长时间了,但是对于...

2018-05-23 23:32:40 314

原创 Retrofit2源码分析(2) CallAdapter详解

Retrofit源码分析基于2.4.0。本章节中将对Retrofit2中的CallAdapter机制做详细讲解。在上一章节中曾提到了Call对象的创建是通过是通过ServiceMethod.adapt()完成的,这里在看看该方法的源码:ServiceMethod.adapt()方法: T adapt(Call<R> call) { return c...

2018-05-23 23:30:02 746

原创 Retrofit2源码分析

Retrofit源码分析基于2.4.0。关于Retrofit的基本使用可以参照 Retrofit官网。Retrofit是Java及Android平台上类型安全的Http客户端。这是官方给出关于Retrofit的简介。这里需要明确:Retrofit只是一个Http网络请求封装库,该库的主要工作是对网络请求进行封装,最终实现网络请求的操作是由Okhttp完成的。基本使用...

2018-05-23 23:29:11 323

原创 Okhttp3源码分析(3) Interceptor拦截器

okhttp3源码分析基于okhttp3.10.0。在前面章节里提到过,okhttp不管是同步请求还是异步请求,最终都是通过RealCall.getResponseWithInterceptorChain()方法获取请求响应的,该方法的核心功能就是要在本章节介绍的okhttp的Interceptor拦截器的工作机制。Interceptor介绍关于okhttp的Intercept...

2018-05-23 23:26:15 540

原创 Okhttp3源码分析(2) Dispatcher分发器

okhttp3源码分析基于okhttp3.10.0。在上一章节中提到在RealCall请求方法中,不管是同步请求方法execute()还是异步请求方法enqueue(CallBack)最终都会调用Dispatcher分发器的相关方法,所以这里对Dispatcher类做具体分析。DispatcherDispatcher,顾名思义就是分发器,主要的作用就是用于处理具体的网络请求...

2018-05-23 23:23:17 228

原创 Okhttp3源码分析

关于okhttp的特点及相关功能的介绍可以查看官网的介绍:http://square.github.io/okhttp/https://github.com/square/okhttp/wiki基本使用使用okhttp发起一次网络请求,只需要以下流程即可:创建OkHttpClient创建Request对象创建一个Call对象,用于发起请求发起网络请求(同步请求ex...

2018-05-23 23:21:28 293

原创 UML 类图和时序图

UML类图在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Composition), 依赖(Dependency)泛化(Generalization)【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为...

2018-04-12 15:04:09 5742

原创 EventBus3.0 性能提升之添加索引

EventBus3.0 源码解析 一文中,在分析Subscriber的register()过程中,说到过一个方法方法findUsingReflectionInSingleClass,在该方法的作用是在RunTime期间通过反射获取Subscriber中的SubscriberMethod。这样就会产生一个问题,在RunTime期间使用反射对程序运行的性能有较大影响。这里我们可以看看EventBu...

2018-03-30 18:18:15 2408

原创 EventBus3.0 源码解析

EventBus,是一个基于Publish/Subscribe的事件总线框架。更通俗的讲,EventBus就是一个基于观察者模式的框架,但是EventBus在观察者模式的基础上有很大一部分改进,基本是实现了Publish/Subscribe的解耦。这里主要对EventBus3.0的实现原理及源码进行分析,关于EventBus的具体用法,可以去GitHub具体查看,这里不做过多介绍。通过对E...

2018-03-29 18:42:48 446

原创 Java AbstractProcessor实现自定义ButterKnife

在上一节中Java注解及自定义注解处理器,主要是说明了Java注解的基本用法以及通过反射在JVM运行时实现Java的注解处理器,同时也说明了通过反射实现注解处理器会对代码的运行性能有一定影响。所以这里主要说明另一种方式,也就是通过AbstractProcessor在Java编译时生成代码的方式实现注解处理器。AbstractProcessor介绍AbstractProcessor,...

2018-03-27 14:11:04 10398 3

原创 Java 注解及自定义注解处理器

注解介绍注解,也被称为元数据(所谓的元数据,就是描述数据的数据)。 所以注解的主要作用就是给指定代码一些描述信息。这些指定代码可以是一个类、一个方法或者是一个属性。Java注解是在Java SE5中被引入进来的,在Java中内置了三种注解以及四种元注解。内置注解 内置注解 说明 @Override 表示当前的方法定义将覆盖超类中的方法,如果方法名或者...

2018-03-20 11:08:49 5035

原创 Git常用命令

git命令大全:git init [newreponame] 创建一个本地仓库。 newreponame :指定新仓库的名称git add [.] [file …] 将文件添加到暂存区。 . :添加所有文件;file … :添加指定文件git status [-s] 查看文件是否修改(文件状态有三种:未跟踪、未暂存、未提交)。 -s :显示

2017-05-17 21:30:05 376

原创 数据结构 二叉搜索树

概述二叉搜索树,也成为二叉查找树或者二叉排序树,这是一种特殊的二叉树。在二叉搜索树中的数据结构中,我们可以通过链表来表示。对该树种的节点,需要定义关键字data,父节点parent,左孩子节点leftChild,右孩子节点rightChild。在二叉搜索树中,对任何节点node,其左子树中的所有节点的data的最大值不会超过node.data,其右子树的所有节点的data不会小于node.data。

2017-04-29 13:15:15 417

原创 数据结构 二叉树及遍历二叉树

概述二叉树,是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树的特性在非空二叉树中,第i层的结点总数不超过 , i>=1;深度为h的二叉树最多有 个结点(h>=1),最少有h个结点;对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;具有n个结点的完全二叉树的深度为

2017-04-24 22:21:45 517

原创 数据结构 树及树的存储结构

概述树,它是由n(n>=0)个有限节点组成一个具有层次关系的集合。当n=0时,这棵树被称之为空树。树它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树;树的相关属性结点的度结点拥有的子树数称为结点的度。度为0的结点称为叶子结点或终端结点,度不为0的结点称为非终端结点或分支结点。除

2017-04-24 21:47:25 1027

原创 数据结构 链表

概述在讲链表的数据结构之前,我们先说一个最简单的数据结构-线性表。对于线性表,想必作为开发者都不会陌生,我们常用的数组就是通过线性表实现的,线性表就是在内存中一段连续的内存地址。与线性表相比,链表的数据结构也是按照每个元素的线性顺序排列的,但是与线性表不同的是,链表的顺序是通过每个元素中指针决定的。双链表双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向前驱结点和后继结点:p

2017-04-23 23:38:45 1295

原创 数据结构 栈和队列

概述栈和队列都是通过动态集合来存储数据,在栈和队列中添加和删除数据都是预先设定的,在栈(Stack)中,被删除的元素是最近添加的元素,所以栈的实现方式是后进先出(Last-in, First-out);在队列中,被删除的元素是最开始添加的的元素,也就是在动态集合中存放时间最长的那个元素,所以队列的实现方式是先进先出(First-in,First-out)。栈在栈的数据结构中,添加元素的操作被称之为入

2017-04-23 15:33:46 455

原创 Java List集合比较

概述Java集合类位于java.util包下,主要包含Collection和Map两大类,在该包下还包含一些常用的集合工具类如Collections等。这里我们可以看一下java下集合框架的整体继承关系图,如下 其中,Queue(队列)是在Java SE1.5中引入的新的集合类,除此之外在Java SE1.5中还引入了一些用于多线程并发的集合框架,这个在这里不做介绍。今天,我们主要介

2017-03-20 14:51:49 3116

原创 Android Activity的UI绘制流程之setContentView方法详解

概述对于Android开发人员来说,想必对setContentView方法不会陌生,每当我们创建一个Activity时,都会重写该Activity的onCreate方法,在该方法中我们必须要调用setContentView方法来显示我们指定的布局或者View。那么setContentView方法又是如何将我们指定的布局或者View放入到指定的Activity中显示出来的呢?今天这篇博客主要就是讲解A

2016-12-04 18:06:53 1207

原创 Android ItemTouchHelper实现RecyclerView交互动画

在上一次博客 Android RecyclerView使用详解,主要介绍了RecyclerView的基础使用,本篇文章将主要介绍通过ItemToucheHelper辅助类完成RecyclerView的交互动画效果。效果如下: ItemTouchHelper简单使用要想通过ItemTouchHelper实现交互动画,只需要以下步骤:定义一个ItemTouchHelper.C

2016-07-03 23:01:51 4347

原创 Android RecyclerView使用详解

简介RecyclerView是Google在android-supportv7包中推出的一个新的控件,该控件的主要作用是用于替代ListView、GridView,相比较于这两种控件RecyclerView有以下有点:RecyclerView内部封装了ViewHolder,更加方便Item的复用提供了一种插拔式的体验,高度解耦,异常灵活,增加控件的扩展性。RecyclerVi

2016-06-29 20:55:42 4445 2

原创 Android 属性动画(Property Animation)

概述Property Animation是一个强大的动画框架,它支持对任何对象进行动画操作。你可以定义一个动画让对象的属性随着时间的变化而改变,不管动画是否需要在屏幕上绘制出来。属性动画会在一个特定的时间内改变某个对象的属性值。想要进行动画操作,你需要指定对象动画的属性,如对象在屏幕上的位置,动画的执行时间等。相关属性值Duration:动画持续时间,setDuration()Time inte

2016-03-16 14:56:56 702

原创 Android 自定义圆形进度条

在Android开发中,对于进度条想必大家不会陌生。例如,应用在执行一个耗时操作时,会通过展示一个进度条来显示“加载中...”的动画作为友好页面以提高用户体验。对于这样的进度条,最简单的实现方式就是通过美工给我们切几张不同的图片,最后通过帧动画的方式来实现。通过帧动画实现固然可以,但是对美工的依赖很大。所以今天在这里给大家介绍通过自定义控件来实现一个圆形的进度条。先看效果图:1. 在res/val...

2015-12-22 20:22:50 1984 2

原创 Android 仿微信支付密码输入框

今天在项目中遇到一个类似微信支付的密码输入框的需求,具体的实现要求如下:开始,我准备通过6个TextView来实现,但是由于TextView在处理软键盘输入的时候会比较繁琐,所以就放弃了这样的思路,最终还是决定通过自定义EditText来实现,因为这样的一个控件主要不同于EditText的一点就是如何显示六个密码输入框。毫无疑问,复写onDraw方法。具体代码如下:

2015-12-21 20:29:12 5541 1

原创 Android 逐帧动画&补间动画

在Android开发中,有的时候为了展示更好的UI效果,通常会通过给一些UI添加动画来达到这一目的,所以Android Api定义了两种动画的Api供开发者使用:逐帧动画和补间动画。逐帧动画(Frame Animation)逐帧动画的原理非常简单,就是通过将一组图片按照一定的次序在一定的时间里顺序播放而达到动画效果的一种动画。在Android中想要使用逐帧动画主要通过A

2015-12-12 20:14:11 1580

原创 Android 图片三级缓存

在Android开发中,我们经常会使用到网络图片资源,而为了避免频繁的访问网络获取图片资源,我们一般会将网络图片缓存到本地或者内存中以方便使用,这就需要使用到图片的三级缓存:通过内存中获得图片通过本地sd卡中获得图片通过网络请求获得图片通过使用"内存-本地文件-网络"这样的三级缓存策略,可以大大提高图片展示的效率,同时可以有效的避免图片oom异常的发生。1. Lru

2015-12-09 16:39:46 889 1

原创 Android 文件系统及权限修改

1、android文件系统

2015-12-04 11:02:23 9779

android scroller学习demo

通过scroller学习,仿QQ ListView侧滑删除效果

2016-04-26

android属性动画demo

android属性动画介绍

2016-03-17

Android自定义圆形进度条

通过自定义一个控件,实现一个圆形的进度条

2015-12-22

Android image三级缓存

在Android开发中,我们经常会使用到网络图片资源,而为了避免频繁的访问网络获取图片资源,我们一般会将网络图片缓存到本地或者内存中以方便使用,这就需要使用到图片的三级缓存: 通过内存中获得图片 通过本地sd卡中获得图片 通过网络请求获得图片

2015-12-22

Android 图片三级缓存

通过LruCache类,实现Android图片的三级缓存。

2015-12-22

自定义圆形进度条

通过自定义控件,实现一个Android圆行进度条

2015-12-21

仿微信支付密码输入框

通过自定义一个EditText实现,仿微信支付的密码输入框,

2015-12-21

自定义控件学习

自定义textveiw,imageview,进度条、音量加减效果控件学习代码,

2015-03-20

Android轮播图控件

通过viewpager实现自定义广告轮播图,可以加载网络图片并显示,同时可以显示广告标题,并实现轮播图的点击事件

2015-01-30

空空如也

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

TA关注的人

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