Android 开源项目源码解析(第二期)

阅读目录

 

android-Ultra-Pull-To-Refresh 源码解析

一个强大的 Andriod 下拉刷新框架。主要特点:(1) 继承于 ViewGroup,Content 不仅可以是常用的 ListView、GridView,还可以是其他任何 View。(2) 简洁完善的 Header 抽象,方便进行拓展,构建符合需求的头部。UltraPTR 总体设计比较简单清晰,首先抽象出了两个接口,功能接口和 UI 接口。PtrHandler 代表下拉刷新的功能接口,包含刷新功能回调方法以及判断是否可以下拉的方法。用户实现此接口来进行数据刷新工作。

DynamicLoadApk 源码解析

DynamicLoadApk 是一个开源的 Android 插件化框架。插件化的优点包括:(1) 模块解耦,(2) 动态升级,(3) 高效并行开发(编译速度更快) (4) 按需加载,内存占用更低等等。原理是 DexClassLoader 加 Activity 代理,即在容器中注册几个代理的 Activity,启动插件的 Activity 时实际启动的都是代理的 Activity,从而解决 Activity 必须注册的问题。

NineOldAnimations 源码解析

NineOldAndroids 是一款支持在低版本(API 11 以下)使用 Android 属性动画以及 3D 旋转动画的框架,它提供了一系列如 ViewAnimator, ObjectAnimator, ViewPropertyAnimator 等 API 来完成这些动画,解决了 Android 动画框架在低版本的兼容性问题。在 API 11 (Honeycomb-Android 3.0)后 Android 推出了属性动画、X 轴翻转等动画效果,但是这些效果却不能运行在 API 11 以下,NineOldAndroids 的出现使得这些动画效果能够兼容低版本系统,保证动画在各个系统版本能够完美运行。

SlidingMenu 源码解析

SlidingMenu 是一个强大的侧边栏菜单,通过拖动屏幕边缘滑出菜单,支持屏幕左右划出,支持菜单 Zoom、Scale、Slide Up 三种动画样式出现。主要特点如下:(1) 侧边栏可以是一个 Fragment,包含任何 View;(2) 使用简单方便,支持左滑和右滑等;(3) 自定义侧边栏显示动画。

Cling 源码解析

Cling 类库是由 Java 实现的 DLNA/UPnP 协议栈。基于 DLNA/UPnP 可以开发出类似多屏互动、资源共享、远程控制等功能的应用,通过 Android 应用管理一个或多个设备,将音频、视频、图片推送到指定设备显示。UPnP 的工作过程大概分为 6 个步骤:寻址(Addressing)、发现(Discovery)、描述(Description)、控制(Control)、事件 (Eventing)、展现(Presentation)。

BaseAdapterHelper 源码分析

base-adapter-helper 是对传统的 BaseAdapter ViewHolder 模式的一个封装。主要功能就是简化我们书写 AbsListView 的 Adapter 的代码,如 ListView,GridView。优点 (1) 提供 QucikAdapter,省去类似 getCount() 等抽象函数的书写,只需关注 Model 到 View 的显示。(2) BaseAdapterHelper 中封装了大量用于为 View 操作的辅助方法。

Side Menu.Android 源码解析

Yalantis 开源动画体验很棒的 Side Menu,菜单打开为翻页效果。

DiscreteSeekBar 源码解析

DiscreteSeekBar 实现了类似 Material Design 风格的 SeekBar。DiscreteSeekBar 可以在 2.1 以上的应用中使用,可以在 XML 中配置显示的格式,也可以在代码中自定义显示的数字或者指定显示字符。使用方法类似 SeekBar,很简单。

CalendarListView 源码解析

CalendarListview 是一个可以方便从日历中选择日期的控件,支持到 API 10 以上,只需要在你的布局中添加 DayPickerView 即可。使用控件 RecycleView 实现的日期选择器,可以选择时间段。

PagerSlidingTabStrip 源码解析

PagerSlidingTabStrip 是配合 ViewPager 使用的 Indicator,支持 ViewPager Scroll 时 Indicator 联动。PagerSlidingTabStrip 实现联动效果的原理是调用 ViewPager 的 OnPageChangeListener。 但是 Viewpager 注册的 Listener 不是自身的 OnPageChangeListener,而是 PagerSlidingTabStrip 内部类 PageListener。 通过 PageListener 实现对 ViewPager 和 Tab 的封装。从而实现滑动联动效果。

公共技术点之 Android 动画基础

简单的介绍了 View 和 Property 动画的概念,如何在项目中创建资源文件,以及如何在代码中使用它们。

公共技术点之 Java 反射 Reflection

介绍了Java 反射,如何通过反射获取类、属性、方法、父类、接口、注解等等。

Volley 源码解析

Volley 是 Google 在 2013 I/O 大会上推出的 Android 异步网络请求框架和图片加载框架。特别适合数据量小,通信频繁的网络操作。Volley 主要是通过两种 Diapatch Thread 不断从 RequestQueue 中取出请求,根据是否已缓存调用 Cache 或 Network 这两类数据获取接口之一,从内存缓存或是服务器取得请求的数据,然后交由 ResponseDelivery 去做结果分发及回调处理。

Android Universal Image Loader 源码分析

Universal Image Loader 是一个强大的、可高度定制的图片缓存。整个库分为 ImageLoaderEngine,Cache及 ImageDownloader,ImageDecoder,BitmapDisplayer,BitmapProcessor 五大模块,其中 Cache 分为 MemoryCache 和 DiskCache 两部分。简单的讲就是 ImageLoader 收到加载及显示图片的任务,并将它交给 ImageLoaderEngine,ImageLoaderEngine 分发任务到具体线程池去执行,任务通过 Cache 及 ImageDownloader 获取图片,中间可能经过 BitmapProcessor 和 ImageDecoder 处理,最终转换为 Bitmap 交给 BitmapDisplayer 在 ImageAware 中显示。

Dagger 源码解析

Dagger 是一款 Java 平台的依赖注入库。Java 的依赖注入库中,最有名的应该属 Google 的 Guice,Spring 也很有名,不过是专注于 J2EE 开发。Guice 的功能非常强大,但它是通过在运行时读取注解来实现依赖注入的,依赖的生成和注入需要依靠 Java 的反射机制,这对于对性能非常敏感的 Android 来说是一个硬伤。基于此,Dagger 应运而生。Dagger 同样使用注解来实现依赖注入,但它利用 APT(Annotation Process Tool) 在编译时生成辅助类,这些类继承特定父类或实现特定接口,程序在运行时 Dagger 加载这些辅助类,调用相应接口完成依赖生成和注入。Dagger 对于程序的性能影响非常小,因此更加适用于 Android 应用的开发。

EventBus 源码解析

EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递,这里的事件可以理解为消息,本文中统一称为事件。事件传递既可用于 Android 四大组件间通讯,也可以用户异步线程和主线程间通讯等等。传统的事件传递方式包括:Handler、BroadCastReceiver、 Interface 回调,相比之下 EventBus 的优点是代码简洁,使用简单,并将事件发布和订阅充分解耦。

xUtils 源码解析

xUtils一个 Android 公共库,主要包括 View,DB, Http, Bitmap 四个模块。View 模块主要的功能是通过注解绑定 UI,资源,事件。DB 模块是一个数据库 ORM 框架, 简单的语句就能进行数据的操作。Http 模块主要访问网络,支持同步,异步方式的请求,支持文件的下载。Bitmap 模块是加载图片以及图片的处理, 支持加载本地,网络图片,而且支持图片的内存和本地缓存。

ViewPagerindicator 源码解析

ViewPagerIndicator 常用语 ViewPager 的界面导航。主要特点:使用简单、样式全、易扩展。该项目总体设计非常简单,一个 PageIndicator 接口类,具体样式的导航类实现该接口,然后根据具体样式去实现相应的逻辑。 IcsLinearLayout:LinearLayout 的扩展,支持了 4.0 以上的 divider 特性。 CirclePageIndicator、LinePageIndicator、UnderlinePageIndicator、 TitlePagerIndicator 继承自 View。TabPageIndicator、IconPageIndicator 继承自 HorizontalScrollView。

HoloGraphLibrary 源码解析

HoloGraphLibrary 是一个可用于绘制图表的项目,支持绘制线状图、柱状图、饼状图。图形设计友好,使用方便。不过库本身代码一般,建议吸收原理重构而不要直接使用。

CircularFloatingActionMenu 源码解析

CircularFloatingActionMenu 是一个与著名应用 Path 菜单类似的(非完整)圆形弹出菜单。可方便的定制菜单以及动画。支持自定义动画、菜单、角度范围、半径等。源码主要分成两部分,一部分是构成菜单的 View 部分,另一部分是动画的操作类。

PhotoView 源码解析

PhotoView 是支持双击或双指缩放的 ImageView。支持 Pinch 手势自由缩放,支持双击放大/还原,支持平滑滚动,在滑动父控件下能够运行良好,支持基于 Matrix 变化(放大/缩小/移动)的事件监听。PhotoView 这个库实际上比较简单,关键点其实就是 Touch 事件处理和 Matrix 图形变换的应用。

Android Lock Pattern 源码解析

Lock Pattern 是 Android 的图案密码解锁库,通过手势连接 3 * 3 的点矩阵绘制图案表示解锁密码。支持 ACTION_CREATE_PATTERN、ACTION_COMPARE_PATTERN、ACTION_VERIFY_CAPTCHA 三种 Action 操作模式。

公共技术点之 Java 动态代理

在某些情况下,我们不希望或是不能直接访问对象 A,而是通过访问一个中介对象 B,由 B 去访问 A 达成目的,这种方式我们就称为代理。这里对象 A 所属类我们称为委托类,也称为被代理类,对象 B 所属类称为代理类。根据程序运行前代理类是否已经存在,可以将代理分为静态代理和动态代理。

公共技术点之 Java 注解 Annotation

注解指能够添加到 Java 源代码的语法元数据。类、方法、变量、参数、包都可以被注解,可用来将信息元数据与程序元素进行关联。Annotation 中文常译为“注解”,注解的主要作用包括 a. 标记,用于告诉编译器一些信息。b. 编译时动态处理,如动态生成代码。c. 运行时动态处理,如得到注解信息。

公共技术点之 View 绘制流程

当 Activity 接收到焦点的时候,它会被请求绘制布局,该请求由 Android framework 处理.绘制是从根节点开始,对布局树进行 measure 和 draw 。整个 View 树的绘图流程在 ViewRoot.java类的performTraversals() 函数展开,该函数所做的工作可简单概况为是否需要重新计算视图大小(measure)、是否需要重新安置视图的位置(layout)、以及是否需要重绘 (draw)。

公共技术点之依赖注入

如果在 Class A 中,有 Class B 的实例,则称 Class A 对 Class B 有一个依赖。非自己主动初始化依赖,而通过外部来传入依赖的方式,我们就称为依赖注入。简单的说依赖注入主要有两个好处:(1). 解耦,将依赖之间解耦。(2). 因为已经解耦,所以方便做单元测试,尤其是 Mock 测试。

公共技术点之 View 事件传递

所有 Touch 事件都被封装成了 MotionEvent 对象,包括 Touch 的位置、时间、历史记录以及第几个手指(多指触摸)等。事件类型分为 ACTION_DOWN, ACTION_UP, ACTION_MOVE, ACTION_POINTER_DOWN, ACTION_POINTER_UP, ACTION_CANCEL,每个事件都是以 ACTION_DOWN 开始,ACTION_UP 结束。对事件的处理包括三类,分别为传递——dispatchTouchEvent() 函数、拦截——onInterceptTouchEvent() 函数、消费——onTouchEvent() 函数和 OnTouchListener。

Android 开源项目源码解析(第二期)的更多相关文章

  1. [原创]android开源项目源码解析(一)----CircleImageView的源码解析

    CircleImageView的代码很简洁,因此先将此工程作为源码解析系列的第一篇文章. 解析说明都在代码里了. /* * Copyright 2014 - 2015 Henning Dodenhof ...

  2. 开源项目源码解析-PhotoView 源码解析

    1. 功能介绍 特性(Features): 支持 Pinch 手势自由缩放. 支持双击放大/还原. 支持平滑滚动. 在滑动父控件下能够运行良好.(例如:ViewPager) 支持基于 Matrix 变 ...

  3. 【Android】EventBus 源码解析

    EventBus 源码解析 本文为 Android 开源项目实现原理解析 中 EventBus 部分项目地址:EventBus,分析的版本:ccc2771,Demo 地址:EventBus Demo分 ...

  4. 史上最详细的Android消息机制源码解析

    本人只是Android菜鸡一个,写技术文章只是为了总结自己最近学习到的知识,从来不敢为人师,如果里面有不正确的地方请大家尽情指出,谢谢! 606页Android最新面试题含答案,有兴趣可以点击获取. ...

  5. Android MIFARE NFCA源码解析

    Android MIFARE NFCA源码解析TagTechnology定义了所有标签的共有接口类BasicTagTechnology 实现了TagTechnology的一些接口 再有具体的标签协议继 ...

  6. 如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法

    楔子 说起读开源项目源码,很多朋友觉得高大上.大佬牛逼,云云~ 挡在很多人面前的不是源码怎么读,而是不知道如何导入源码到开发工具以及如何调试源码. 本文将以 spring-cloud-gateway ...

  7. Git8.3k星,十万字Android主流开源框架源码解析,必须盘

    为什么读源码 很多人一定和我一样的感受:源码在工作中有用吗?用处大吗?很长一段时间内我也有这样的疑问,认为哪些有事没事扯源码的人就是在装,只是为了提高他们的逼格而已. 那为什么我还要读源码呢?一刚开始 ...

  8. Android 数据库 ObjectBox 源码解析

    一.ObjectBox 是什么? greenrobot 团队(现有 EventBus.greenDAO 等开源产品)推出的又一数据库开源产品,主打移动设备.支持跨平台,最大的优点是速度快.操作简洁,目 ...

  9. tp6源码解析-第二天,ThinkPHP6编译模板流程详解,ThinkPHP6模板源码详解

    TP6源码解析,ThinkPHP6模板编译流程详解 前言:刚开始写博客.如果觉得本篇文章对您有所帮助.点个赞再走也不迟 模板编译流程,大概是: 先获取到View类实例(依赖注入也好,通过助手函数也好) ...

随机推荐

  1. 四个流行的Java连接池之Proxool篇

    Proxool是一个JavaSQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装.可以非常简单的移植到现存的代码中.完全可配置.快速,成熟,健壮.可以透明地为你现存的JDBC驱 ...

  2. C# 未能加载文件或程序集“MySQLDriverCS..." 错误解决

    在解决方案的属性里,生成,里面有个目标平台,网上说的 大概也就是64位和32位的不兼容问题..试着把目标平台改为X86后竟然神奇的正常了!

  3. 体验魅力Cognos BI 10 系列,第1 部分: 第一次安装

    体验魅力Cognos BI 10 系列,第1 部分: 第一次安装吴敏达, 信息管理软件高级技术顾问, IBM简介: 本系列教程旨在帮助您通过实际动手掌握Cognos BI 10.1 的主要功能.在这一 ...

  4. Silverlight技术调查(1)——Html向Silverlight传参

    原文 Silverlight技术调查(1)——Html向Silverlight传参 近几日项目研究一个很牛的富文档编辑器DXperience RichEdit组件,调查环境为Silverlight4. ...

  5. ORA-00942:表或视图不存在(低级错误)

    在好多时候.调试PL/SQL对象时会报.ORA-00942 看看错误原因吧: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamFjc29uX2JhaQ== ...

  6. Python IDLE 快捷键

    Python IDLE  快捷键 编辑状态时: Ctrl + [ .Ctrl + ] 缩进代码 Alt+3 Alt+4 注释.取消注释代码行 Alt+5 Alt+6 切换缩进方式 空格<=> ...

  7. 用MFC实现WebGUI--(CDHtmlDialog)

    自从去年年底一次棘手的界面,开始研究用web做界面到现在大约1年,这一年间不是局限在实现层面,也并非一直研究这一个问题,有很多问题其实不是问题,只是自己没有想清楚或者思想没放开.对于一个界面开发人员, ...

  8. 14.2.5.2 Clustered and Secondary Indexes

    14.2.5.2 Clustered and Secondary Indexes : 每个InnoDB 表 有一个特别的索引称为clustered index 行数据存储的地方. 典型的,cluste ...

  9. 苹果新的编程语言 Swift 语言进阶(五)--控制流

    Swift 语言支持C语言全部的控制语句.包含for  和while循环语句,if和switch条件语句,以及break和continue控制语句等. Swift 语言除了支持以上语句,还添加了一个f ...

  10. Delphi 数据类型列表 good

    Delphi 数据类型列表 分类 范围 字节 备注 简单类型 序数 整数 Integer -2147483648 .. 2147483647 4 有符号32位 Cardinal 0 .. 429496 ...