自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 论坛 (1)

原创 组件化之路

前言从之前就一直听说对应用进行组件化,很是火热,也出现了很多组件化方案的开源库。于是查阅了很多的学习资料,看了几个开源的组件化实战例子与组件化方案的开源库,总结后尝试去对之前做过的一个项目进行组件化,也是对学习到的进行实践与检验。在实践的过程中很感谢板神对我的指导。开始什么是组件化?组件:可以想象成一辆车,车由车轮、发动机、方向盘等组成,这些物件可以认为是组件。组件化是指解耦复杂系...

2019-07-07 15:12:24 428

原创 Flutter渲染原理学习

开始​写Flutter已有好几个月的时间了,最开始总会有一点点不适应,但是写一段时间后还是觉得蛮顺手的,而且支持热更,不需要等整个项目编译,提升了不少效率。但是在开发过程中,总是会遇到因为Widget嵌套得不好而出现一些错误,于是一直想学习一下它的相关原理看看是为什么。所以通过学习和参考网上大神分享的的一些资料,整理出了今天要分享的文章。正文Flutter有三棵重要的树,分别是Widget树、Element树、RenderObject树,它们各司其职,分成了几个相关联但清晰的结构。Widget树与我们

2020-09-05 21:09:52 108

原创 一个轻量级的弹幕库——EarlTrumpet

EarlTrumpet一个轻量级的弹幕库https://github.com/asendiLin/EarlTrumpet效果图支持功能如下:可自定义弹幕的布局弹幕不会重叠弹幕的点击事件,可自行实现点击区域的策略可设置弹幕的速度Todo List支持多种类型的弹幕共存完成每条弹幕的高度自动计算优化满屏弹幕时的卡顿支持自定义跑道的选择增强缓存机制过程最开始的思...

2020-03-06 19:36:48 158

原创 EpoxyRecyclerView的简单使用与源码分析

前言EpoxyRecyclerView很好地支持列表中有多种布局类型,让我们在使用的过程无需去关注ViewType,而是直接为每个类型定义对应的Model就可以了。它会自动为我们做了差分,还提高了的性能。EpoxyRecyclerView的Github地址:https://github.com/airbnb/epoxyEpoxyRecyclerView的使用添加依赖:在app的bu...

2019-10-12 18:50:27 528

原创 探索组件化框架CC原理

前言CC采用组件总线的方案,可以让你在对老项目进行组件化时不需要一下子拆分成一个个组件,反而这是一个渐进的过程,也就是文档所说的渐进式组件化。既然它这么优秀,那我们在使用它时,学下它的原理应该会有很多的收获。CC的项目地址:https://github.com/luckybilly/CCCC的文档地址:https://qibilly.com/CC-website文中的图片出自它的文档地址。...

2019-08-10 09:52:40 275 2

原创 EventBus源码学习

前言之前使用EventBus不多,所以也没有比较好的去学习它,后来使用得比较频繁,而且感觉很好用,所以对它的使用进一步学习外,最近还对它的实现进行学习。EventBus的创建EventBus采用单例和Builder模式对本身进行创建:public static EventBus getDefault() { if (defaultInstance == null) { ...

2019-04-19 19:24:57 89

原创 使用Flutter编写应用(五)

前言如果你从第一篇连读到本文,可能你已经把天气app的简易版写出来了,但是数据的缓存或者列表的美观度还是远远不够。本文将对城市列表进行改动并且对获取到的网络数据通过文件缓存起来,在拿不到网络数据的时候使用。1.修改成宫格将CityWidget中的build方法返回改成宫格的Widget @override Widget build(BuildContext context) { ...

2019-03-19 13:45:21 116

原创 使用Flutter编写应用(四)

前言前面分享了天气详情页与城市列表页,但是它们目前还是相对独立的,也就是没有任何的数据传递与之间的切换。本文将分享如何将它们连接起来,实现页面间的跳转与数据传递。开始1.页面跳转a.定义路由名字在MaterialApp中定义routes:routes: { "weather": (BuildContext context) => WeatherWidget(), "cit...

2019-03-08 18:08:15 134

原创 使用Flutter编写应用(三)

前言前两篇实现了从实时天气的界面,这次将分享获取城市列表的数据并展示出来。获取数据和刷新的流程跟天气获取展示是一样的,不一样的是通过本文可以认识新的组件ListView。开始1.创建城市Widgetclass CityWidget extends StatefulWidget { @override State<StatefulWidget> createState(...

2019-03-07 18:49:05 80

原创 使用Flutter编写应用(二)

前言上一篇分享了如何搭建界面,但是没涉及到数据的获取与操作。本文将分享如何异步从网络获取数据并显示出来。开始1.引入网络请求包和json转换包:import 'dart:convert';import 'dart:io';2.创建数据实体类:class WeatherData { WeatherData({this.city, this.tmp, this.txt}); ...

2019-03-06 17:29:31 103

原创 使用Flutter编写应用(一)

前言搭建好Flutter的开发环境后,便可以开始应用的编写,关于环境如何搭建上篇文章已有分享。现在进入使用Flutter来编写一个小应用,由于自己没时间去搭建服务端和写接口,所以直接去申请天气预报接口,然后开始了应用的实现。开始本文分享的是构建天气详情页,展示的数据暂时写死,后面会通过网络接口换上。该页面准备展示城市,温度和天气情况,在最下面还展示一条心情便签。创建并初始化创建工程,然后...

2019-03-01 19:11:00 315

原创 入门Flutter——初体验

前言Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生应用界面,它是开源的。使用Dart作为开发语言,如果有Java编程经验,Dart语言很好上手。最开始接触的时候,对于它的编码有点抗拒(虽然现在还有点,应该是不熟悉的原因吧),但不用具备移动开发经验的人也可以进行学习与使用。Flutter可加入到现有的Android或者IOS项目中,它还具备热加载。开始1...

2019-02-28 18:09:32 384

原创 Activity将View添加到Window的过程

前言在开发的时候,我们经常会因为跳转到另外的界面而去启动Activity,然后被启动的Activity就会呈现在屏幕上。实际启动的过程很复杂,涉及IPC、Window 的添加等等。本文章将分享Activity的View被添加到Window的过程。正文在Activity的启动过程中,会调用ActivityThread还会调用handleLaunchActivity去开始Activity的生命周...

2019-02-27 10:14:30 187

原创 OkHttp源码学习(二)拦截器

前言OkHttp同步或者异步都会通过getResponseWithInterceptorChain方法获取响应,此方法通过一系列的拦截器进行处理。这些拦截器分别有:RetryAndFollowUpInterceptor(重试或者重连)、BridgeInterceptor(request和response的转换)、 CacheInterceptor(缓存)、ConnectIntercepto...

2018-11-30 20:39:55 86

原创 RecyclerView的复用与回收机制

前言最近学习了RecyclerView的进阶使用,同时也学习了它的缓存机制,以下是通过看它相应的源码去了解它的获取View(ViewHolder)缓存的过程。寻找获取缓存起点获取缓存的起点为绘制流程的onLayout方法,然后追寻相关方法:dispatchLayout()—>dispatchLayoutStep1()—>mLayout.onLayoutChildren(mRe...

2018-11-10 20:02:49 1351

原创 RecyclerView的进阶使用(分割线、拖拽、动画)

前言使用RecyclerView已经很久了,它相对于ListView和GridView方便很多,使用LayoutManager等类可以给它的使用带来很大的便利。但是后面发现,使用RecyclerView的功能只是那么一小点,也就是都它的基本使用,所以最近对它进一步学习和使用。添加分割线RecyclerView默认是没有为我们添加分割线的,这得需要通过自己去实现,虽然看起来麻烦,但是反过来...

2018-11-08 21:41:42 257

原创 重温RxJava(使用Kotlin编写)

前言 使用RxJava挺久的了,但是这后面接触的少,所以有一些淡忘了,于是今天再一次总结了一下,刚好最近都在用Kotlin,所以以下代码是使用Kotlin编写的。RxJava可以说是这样的:异步:可以很方便地切换线程简洁:在复杂的逻辑中保持代码简洁基本使用1.创建一个ObserveronNext:观察数据onError:事件队列失败调用的方法onCom...

2018-09-15 23:41:06 2083

原创 Retrofit源码学习

前言 学习Retrofit的源码已经有一段时间了,最近又翻了一遍,然后总结了一下。它里面用到了很多个设计模式,有工厂模式、代理模式、适配器模式等。Create方法mRetorfit.create(Service.clss)create方法的返回语句如下: return (T) Proxy.newProxyInstance(service.getClassLoad...

2018-09-05 23:55:27 116

原创 从生成代码来学习Dagger2的注入过程

前言 用过的同学都会知道,Dagger2用于去除依赖,通过注解便可以为我们生成创建对象的代码。通过apt插件在编译阶段生成注入代码,反射只在编译阶段使用,在应用运行阶段没有涉及到注解反射。下面直接进入生成代码的分析,这也是我最近对生成代码学习的记录。当我们使用Dagger编写好代码后,build一下,只要依赖关系没问题,那么就可以在app/build/generated/source...

2018-09-04 20:56:47 128

原创 OpenGL ES 2.0学习(一)入门知识点

前言 一个多月前开始学习Android OpenGL ES,起初是因为需要做滤镜,然后慢慢发现很有趣。但是自己感觉学起来并没有想象那么容易,主要涉及太多的转换,还有着色器语言等,但它确实强大,可以做一些滤镜,很炫的3D效果/全景等。目前自己还处于入门阶段。OpenGL ESOpenGL ES 为OpenGL嵌入式系统,是一个适用于嵌入式系统的二维或者三维的图形库是桌面版O...

2018-08-30 21:04:01 462

原创 自定义一个很舒服的视频录制按钮

前言 最近开发了相机的相关功能,其中包括了视频的录制。当做好录制功能时,学长就要求要把录制的按钮改成比较友好和美观,过后按照了提出的效果自定义了这个录制按钮。今天分享给大家。...

2018-07-21 01:09:57 716

原创 Architecture Component—Paging 的使用及源码阅读

Paging Libray简单来说,Paging Libary用于数据的加载,然后显示到UI上。它是很有趣并且很方便于我们的一个库,比如在后台线程加载好数据,然后在主线程中将数据展示出来。实现了数据的加载处理与UI分离开,并且可以在用户不知不觉中加载更多的数据,使之能够无限的加载更多,不用待到以后滑到底采取加载更多。当然,它的功能不止上述。Paging Libray的相关类Da...

2018-07-03 21:33:39 817

原创 Java基本类型与包装类型

前言 从开始接触Java到现在也有两年的时间了,还记得最开始就是学数据类型,这是最基础的,可能大家会觉得这有什么好讲的,但是很多时候我们在开发中可能会忽略关于它们的一些知识点,这篇文章将给大家带来关于Java基本类与String的一些知识。基本类型以下通过一个表格来说明它们: 类型 字节数 取值范围 byte 1 -2^7 ~ 2^7 - 1...

2018-05-13 21:22:55 152

原创 OkHttp使用与源码学习(一)

前言 从开始使用OkHttp已经很久了,它是一个很nice的网络框架,其功能强大,可进行失败重连,在连接中出问题时自动恢复。最近在复习的时候学了它的源码,以下主要是写它的使用和源码学习。使用GET请求//异步请求OkHttpClient client=new OkHttpClient();Request request=new Request.Builder()...

2018-05-03 22:25:51 220 1

原创 设计模式之观察者模式

概述 日常生活中,我们在某个应用中订阅某一主题的信息,那么该应用会向我们推送我们所订阅类型的相关信息;或者说我们定了X类型的报纸,那么送报员每天会给我们送来X类型的报纸,让我们能够得知该类型的最新动态。以上的两种场景,就是观察者模式的表现。我们就像是观察者,而我们订阅的主题就像是被观察者,只要他们有最新的消息(更新)就会来通知我们,使我们可得知最新的动态,方便我们作出一系列的操作等。...

2018-04-29 22:39:06 81

原创 设计模式之工厂模式

概述 一说到工厂,我们都知道它是生产某产品的场所,里边有工人、设备、技术人员等。经过一番的辛勤劳作,便会产出相应的产品。而工厂模式,顾名思义它是一种像工厂的模式,把某个对象的生产过程封装在工厂类中,根据用户的不同需求生产出不同的产品。工厂模式例子//动物的最上层public interface Animal { void move();//移动}//猫类...

2018-04-22 17:54:04 116

原创 设计模式之Builder模式

概述 在平时开发或者开别人源码的时候,都会看到很多的Builder,它把构建的细节完全隐蔽起来,在用户不知道构建细节的情况下把一个对象创建了出来,就很像建房子一样,我们只需要提供材料、工钱和设计图,建设过程全部交由建设工程师做,你完全可以不用知道怎么做,最后一个跟设计图一样的房子就会出现在面前(当然需要时间)。Builder模式例子//房子构建类public class H...

2018-04-16 23:13:45 117

原创 设计模式之策略模式

概述 在平时出门的时候,可能我们会为了选择穿什么鞋子而犹豫,因为出门的目的不同,所以就会选择不同的鞋子,而穿上不同的鞋子出门。今天为大家带来的设计模式是策略模式,它与上述的情景很类似,比如在图片缓存策略中,我们可以根据需要(本地缓存或本地缓存+内存缓存)而传入不同的缓存类。策略模式的定义为:有一系列的算法,将每个算法封装起来,各个算法可以替换。可能定义有点抽象,以下为具体的代码实现简单的策...

2018-04-08 13:23:50 76

原创 设计模式之代理模式

概述 在生活中,我们可能会遇到这样的场景:我们想购买一些进口的商品,但是自己没有护照或通行证,这时候我们想到的就是代购,而代购的这个人也就是代理人,ta不是实际销售商品的人,只是起到代购的作用,在这中途ta可以赚点差价作路费(中途操作)。下边介绍的就是与这个场景很相似的设计模式——代理模式代理模式代理模式分为两种,一种是静态代理,另一种是动态代理。静态代理:代码实...

2018-04-05 23:15:18 91

原创 基于RecyclerView实现侧滑删除

列表的条目侧滑删除可以说是最熟悉不过的了,它的实现方法也有很多,这次我给大家带来的是基于RecyclerView实现的。关于RecyclerView的使用在本文中没有提及,可以看看这篇:RecyclerView的使用先看看效果图: 大概思路为:重写RecyclerView的onTochEvent方法点击时,获取点击的位置,根据位置(坐标)去获取点击的条目对应的View,顺...

2018-03-02 22:19:53 739

原创 ThreadLocal的使用和实现原理

概述 ThreadLocal是一个将指定值储存到指定线程的类。简单的讲ThreadLocal可以指定储存数据类型,然后在不同线程中设置某个值,这个值在其他线程是不可以获取到的,只能在本线程才能获取到。平常中很少使用到ThreadLocal,但在也不少见到,比如Looper类中就有使用到它。使用ThreadLocal的使用不难,就是先创建ThreadLocal对象并指定要存储的...

2018-03-01 14:32:28 357

原创 集合框架源码学习之HashTable

前面学习的集合都是非线程安全的,这次学习的集合它的方法都加了同步,使得它是线程安全的。简介基于hash表实现,存放key-value对,通过单链表解决hash冲突当容量超过闸值时,会进行扩容实现Serializable、Cloneable接口,支持克隆和序列化线程安全,可用于多线程中源码构造方法//存放单链表,用于解决冲突,每个HashtableEntry实际...

2018-02-10 23:46:33 131

原创 集合框架源码学习之HashMap

简介基于哈希表,每一个元素都是key-value对,内部通过单链表解决冲突有闸值,当元素个数大于闸值时会自动扩容(为原来的2倍)非线程安全实现了Serializable、Cloneable,支持序列化和克隆源码构造方法public class HashMap<K, V> extends AbstractMap<K, V> implements Ma...

2018-02-10 00:19:06 176

原创 集合框架源码学习之LinkedList

简介基于双向链表实现可当做栈和队列使用非线程安全实现Serializable接口、Cloneable接口,支持序列化和克隆源码构造方法public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E&...

2018-02-08 23:27:40 97

原创 集合框架源码学习之ArrayList

简介ArrayList基于数组进行一系列的操作:查找、删除、修改等非线程安全实现Serializable、RandomAccess、Cloneable:支持序列化、快速随机访问和克隆当容量满了,会自动扩容:增加到原来的1.5倍源码1.构造方法public class ArrayList<E> extends AbstractList<E>...

2018-02-08 01:17:16 149 1

原创 MVVM的学习

最近在学习MVVM,阅读了一些相关的文章,自己做了总结。MVVM是什么?MVVM它分为三个层:Model:数据模型,对数据进行处理View:UI展示,包括Activity、Fragment等ViewModel:View和Model之间的桥梁,处理界面逻辑,让View和Model之间进行交互。 为什么要有MVVM?现在使用的基本是MVP或是MVC,最开始觉得MVP

2018-01-23 22:11:58 210

原创 NDK开发

什么是JNIJNI为Java Native Interface(Java本地接口),它是为Java调用c/c++封装的一个接口,可以说是Java代码与C/C++之间互调的一个桥梁。什么是NDKNDK是Android提供的工具集,使用它可进行交叉编译,帮助开发者快速开发C/C++的动态库。使用NDK的好处安全性:so库被反编译很困难方便性:可以使用当前已有的C/C++

2018-01-21 22:21:23 146

原创 AIDL的使用

AIDL是进程间通信的一种方式,从以前学习AIDL后,很少用过,最近在复习了下其使用方法,以下为AIDL的使用方法,最后稍微分析了一下AIDL为我们生成的代码的逻辑使用服务端首先在main文件夹下创建名字为aidl的文件夹 2.在aidl文件夹下创建一个与java文件夹夹下一致的包结构 3.在包里面创建aidl文件,然后在里面定义方法,代码如下// PayIn

2018-01-14 23:00:59 303

原创 Volley源码学习(处理请求)

Volley的流程

2017-12-28 22:50:39 115

原创 Android的消息机制(源码篇)

大致流程 将当前线程转成Looper线程;Handler发送消息,插到MessageQueue(消息队列);looper进入循环,如果在消息队列中拿到Message就交给Handler,如果消息队列中没有消息则阻塞。线程的分类及通信我们都比较明白线程可分为主线程和工作线程,还有线程之间的通信分为主线程与工作线程、工作线程与工作线程(比较少听到)。相关的对象在上一篇

2017-12-27 23:47:32 130

空空如也

在用DrawerLayout时,如何改变标题栏的图标

发表于 2017-01-04 最后回复 2018-10-08

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