自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 问答 (1)
  • 收藏
  • 关注

原创 Android 之路 (0) - 序章

Android development framework evolution从实现最简单的需求开始,不断的对代码结构进行优化、封装,最终形成一套属于自己的快速开发框架。前言UI方面主要以Design包为基准,网络及异步操作选用RxJava2+Retrofit,现阶段开发语言使用Java,在慢慢的演进中逐步替换为Kotlin,以Google Sample的标准MVP模式为基准,逐渐演进成为自...

2019-05-20 11:44:52 133

原创 Android 之路 (12) - RxLifecycle的集成

引言引入Rx系列有一个非常大的缺陷:容易造成内存泄露,大多数都是忘记取消订阅而造成的,本篇就以RxLifecycle进行封装,在底层实现自动订阅与取消订阅。正文分析我们在之前的Android 之路 (4) - 对RxJava2的简单封装中,在BasePresenter中有一个unDisposable的方法,该方法会在onDestroy和onDialogCance的时候调用,这已经从一定程度...

2019-10-17 14:22:05 738

原创 Android 之路 (13) - RxJava请求结果预处理、多数据结构适配及统一错误处理

前言对于大多数开发者来说,我们在做网络请求的时候,并不想重复的去处理状态码,错误信息等,我只关心我需要的结果,本文将会讲解通用状态码的封装、错误信息的统一处理、多种JSON数据格式的适配。正文预期目标统一 success 和error状态的处理View 成只关心success的data各种奇葩 Json 结构的统一处理统一 Exception 处理分析其实整个实现思路 Ret...

2019-10-17 14:20:53 915

原创 Android 之路 (11) - 对Toolbar的封装-实现渐变标题栏与沉浸适配

引言看过上篇文章的演示,就应该能看到我们在滑动返回的时候,顶部的状态栏其实是没和我们的页面一起滑动的,本篇就此问题进行适配,让标题栏沉浸到状态栏中,而且还是能够适配现在市面上所见的异形屏。正文我们要实现下面这样的一个标题栏,支持沉浸图片或者纯色,还需要提供 helper,为以后需求变更做准备。分析首先来分析一下我们的布局,在默认的情况下,我们的整个屏幕分为三部分(没有考虑虚拟状态栏):...

2019-05-24 18:55:07 583 2

原创 Android 之路 (10) - 集成滑动返回(SwipeBackLayout)

引言滑动返回不说是App的标配,但起码也是非常常见的功能了,本章主要讲解集成一个开源的滑动返回库:SwipeBackLayout,以及一些坑的解决。正文关于SwipeBackLayout的集成,我这里不打算使用依赖的方式集成,而是采用源码的方式进行集成,因为后续我还需要对Base进行扩展,需要修改一些源码。集成源码将源码下载下来,在core下面新建一个swipebacklayout包,将...

2019-05-24 18:54:24 554

原创 Android 之路 (9) - 第一个AS工程代码模板

引言前面我们在封装Toolbar的时候,使用的是在xml中修改style,其实这种做法在适配会有一点问题,那就是每次我们新建Activity的时候都需要手动的更改 theme、style,这比较繁琐、也没什么意义,所以下章我们就着手解决这个问题。正文解决方案解决方案也很简单,就是利用AS自带的工程模板就能够解决这个问题,也就是下面这个东西:这个我们用得多,但是真正了解的应该不多,其实他...

2019-05-20 11:53:15 317

原创 Android 之路 (8) - Toolbar - NavigationIcon间隙、Title居中、BackText

引言原生的Toolbar的title是居右显示的,而大多数情况下UI设计的图title是居中。另外默认的返回按钮间隙是16dp,而设计图上面是按照iOS来设计,所以返回按钮是8dp,本篇就此进行适配。正文NavigationIcon间隙先看看原来的样式,我这里为了演示,特地换了一个返回箭头。修改BaseToolbarStyle然后我们在原本定义号的BaseToolbarStyle中在...

2019-05-20 11:52:34 2318

原创 Android 之路 (7) - 对BaseActivity的简单封装

引言终于到了BaseActivity的封装了,在本章中将对通用性的一些方法和操作进行抽取,放到Base中。正文先起个名字,我们的Base就叫CandyBaseActivity吧,Candy是糖果的意思,我希望这一套东西能让人像吃糖果一样的甜!分析在本篇中关于Base,我们需要进行两种封装:CandyBaseActivity,最基本,最底层的Base,附带通用操作的封装。Candy...

2019-05-20 11:52:01 1770

原创 Android 之路 (6) - 关于Toast和Log的封装

引言上篇完成了对Dialog的简单封装,本篇将对Android开发中另外两个常用工具类的封装:T(Toast)和L(Log)。正文Toast的简单封装这一步主要是将创建 Toast 的布局抽取出来,形成一个单独的工具类,调用的时候直接通过T.showToast进行调用即可,代码如下:/** * 描述:Toast工具类. */public class T { /** ...

2019-05-20 11:51:22 445

原创 Android 之路 (5) - 对Dialog的简单封装

引言前几篇文章都在对RxJava2和Retrofit的封装,没有 Dialog ,看上去还是比较生硬,所以本章就来对Dialog进行封装。正文DialogHelper为保证Dialog的可扩展性和可替代性,我们在编码的时候不应该直接使用 new 的方式来创建和使用,而是应该对我们需要的组件再做一层中间件封装,对内部提供调用方法和接口,在未来出现替换组件的情况也只需要在中间件中替换相应的组件...

2019-05-20 11:50:47 251

原创 Android 之路 (4) - 对RxJava2的简单封装

前言上篇对Retrofit进行了封装,本篇将继续深入对RxJava2的线程转换、取消订阅和统一订阅结果管理相关的封装。正文线程转换以下代码基本上在每个Presenter中都会使用到,每次都要重新写就比较繁琐了,而RxJava提供compose方法可以进行合并。.subscribeOn(Schedulers.io())//运行在io线程.observeOn(AndroidSchedule...

2019-05-20 11:49:09 649 1

原创 Android 之路 (3) - 对Retrofit的封装

引言上篇中实现了MVP的改造,但是我们的网络请求部分任然是比较冗余了,本篇将对Retrofit进行封装。正文思路对Retrofit进行封装算是我们基础框架的一部分,所以我们需要将这部分代码封装到 library-core 中,对于封装的实现思路如下:将Retrofit的创建更改为单例模式创建,增加可配置性,减少重复创建将Service的创建也更改为单例模式创建NetConfi...

2019-05-20 11:48:27 287

原创 Android 之路 (2) - 对登陆进行 MVP 改造

引言本文承接上篇,在实现了简单登录后,本章更近一步,先实现UI效果,再将架构模式更改为 MVP.正文关于MVP模式,我推荐的是谷歌官方的例子android-architecture,这个库基本包含了所有的架构模式,是不错的入门和深入的教程。需要注意的是,架构模式没有最好,只有最适合,不要盲目的追求架构而忽略了编码。本文所使用的MVP模式是最简单的一种模式,将来会在MVP的基础上,演变成为属...

2019-05-20 11:47:48 140

原创 Android 之路 (1) - RxJava2+Retrofit实现简单登陆

前言使用RxJava2+Retrofit实现简单登陆。正文1. Hello world1.1 相关版本Android Studio 3.1.3Gradle 3.1.3targetSdkVersion 26support版本 26.0.21.2 创建项目项目的UI方面选用Design和support,所以在创建项目的时候直接选择【Basic Activity】,AS会自动配...

2019-05-20 11:47:05 427

原创 Android之路 - 实现高斯模糊的菜单

前言本章主要用原生的方式实现一个菜单页面,主要用到的知识点为==位移动画==,我们可以先看看效果。分析高斯模糊背景我们的菜单背景是一个高斯模糊的背景,虽然看上去高大上,但是不要被吓到了,实现原理非常的简单:==截取 #3a8000==当前屏幕转换为==bitmap==,将bitmap进行高斯模糊,然后设置为菜单的背景。当然,还有另外一种实现方式就是让UI设计师切一张...

2018-09-07 12:54:40 1340

原创 Kotlin从入门到夺门而出(1) - 开坑篇

前言即日, Kotlin从入门到夺门而出系列正式开坑了,唯一希望的是我能够填完整个坑。 本篇为开坑篇,主要从以下几个方面出发,解答正在踌躇徘徊的人的疑惑,也是为了完整的引人入坑。 - 什么是kotlin? - kotlin在能取代Java吗? - 为什么要学习kotlin? - 我该如何学习kotlin?正文什么是kotlin?什么是kotlin?关于什么...

2018-09-05 23:35:24 207

原创 APP登陆页面适配

先看效果图。原理为RootView增加监听事件,然后进行滚动 至于该滚动多少,这是需要自己慢慢进行计算。xml<LinearLayout android:id="@+id/llLogin" android:layout_width="match_parent" android:layout_height="ma...

2018-09-05 23:34:38 391

原创 Material Design系列 - 自定义Behavior实现伸缩标题栏

引言CoordinatorLayout+CollapsingToolbarLayout+Behavior真是一个好东西,很多复杂的UI交互效果都可以通过Behavior来实现,用了Behavior之后腰也不疼了,再也不会对设计师说这个实现不了了,只要给我时间我就实现给你看!今天带来第一个自定义Behavior:实现一个伸缩的标题栏。效果图如下实现思路监听Collapsin...

2018-09-05 23:33:49 725

原创 Gradle 使用技巧(七) - 10分钟将快速开源 Jitpack 与增加中文注释

引言作为一个开发者,最自豪的事情就是自己的努力得到了别人的赞赏。这一次就通过一个简短的系列:如何在最简短的时间内将自己的lib上传到中央仓库供其他人下载,并且增加中文源码注释。选择前提条件: - 有GitHub帐号 - 有需要开源的库为了达到快速开放的目的,本次选择的仓库是jitpack,而不选择maven,其主要原因是maven太过于复杂,还需要注册账号,初次使用还可能需...

2018-09-05 23:32:54 633

原创 Android面试题库 - Fragment(一) - 基础

Fragment为什么成为第五大组件Fragment为什么成为第五大组件四大组件:Activity、Service、Broadcast Receiver、Content ProviderFragment具有生命周期,使用广泛Fragment加载到Activity的两种方式xml通过fragment标签引入的方式code中动态添加FragmentPagerA...

2018-09-05 23:31:55 452

原创 Android面试题库 - Activity(一) - 基础

Activity生命周期什么是Activity是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 Activity的4种状态 名称 解释 running Activity处于前台,与用户有交互的情况下,此时Activity不会被回收 paused Activity被一个透明的Activ...

2018-09-05 23:30:58 191

转载 转载:Futurice-Android 开发最佳实践

转载至:https://github.com/futurice/android-best-practices从Futurice公司Android开发者中学到的经验。 遵循以下准则,避免重复发明轮子。若你对开发iOS或Windows Phone 有兴趣, 请看iOS Good Practices 和 Windows client Good Practices 这两篇文章。摘要...

2018-08-31 23:13:29 199

原创 Material Design系列(一)- CollapsingToolbarLayout 和AppBarLayout

1. 什么是CoordinatorLayoutCoordinatorLayout是Android官方在Design包提供的控件,来自官方的解释是:CoordinatorLayout is a super-powered FrameLayout它主要用于两个方面: - 当做普通的FrameLayout作为根布局使用 - 作为一个或者多个子View进行复杂交互的容器Coordin...

2018-08-30 23:31:19 524

原创 自定义View - 简单的TextView封装

引言在平常的开发中,我们总会有各种各样的按钮,圆角的、直角的、正常状态的、按下状态的、禁用状态的。一直的做法就是在drawable中写一个selector,然后用item加shap来实现。这种做法实现起来也是非常简单,但是存在一个问题:当我们shap文件有上千个的时候,我们应该如何维护?分析先上一张图吧:仔细分析下来,图中的几个按钮都是差不多的,他们之间有着许多的相通点,像...

2018-08-30 00:04:44 559

原创 Gradle 使用技巧(六) - 使用统一的Gradle管理

1. 前言大多数情况下我们依赖第三方库都是直接在dependencies中直接引用,在引入少量且不是多个地方引用是没有问题的,但是一旦某一个开源库在多个地方引用,且每个地方引用的版本都不一致的时候,就只在是难以维护了。 在前面讲过,Gradle是Groovy语言编写的,既然是语言,那么我们可以不可以像Java那样将引入配置抽取成为一个常量配置呢?答案是肯定的,要不然这篇文章也没有继续写下去的...

2018-08-30 00:02:45 379

原创 Gradle 使用技巧(五) - AAR

1. 什么是AAR关于aar文件,摘取官方的解释:AAR 文件的文件扩展名为 .aar,Maven 工件类型也应当是 aar。文件本身是一个包含以下强制性条目的 zip 文件: - /AndroidManifest.xml - /classes.jar - /res/ - /R.txt此外,AAR 文件可能包含以下可选条目中的一个或多个: - /assets/ - /libs/...

2018-08-30 00:01:14 1163 1

原创 Gradle 使用技巧(四) - 如何定位和解决依赖冲突

1. 前言随着业务的复杂度加深,我们免不了要引入许多的第三方开源库,也不可避免的会出现依赖冲突的错误。最常见的是V7、V4包之间的冲突。2. 如何定位依赖冲突解决依赖冲突很简单,难得是如何去定位是引入的哪个库导致的依赖冲突。 如果只想看结果的可以直接跳到最后。2.1. 排除法排除法很简单,但是很耗时,就是选择一个依赖一个依赖的注释、编译、看结果。当然这也是最傻的办法,...

2018-08-26 18:28:05 3272

原创 Gradle 使用技巧(三) - dependencies 的类型与区别

前言dependencies对于Android开发人员来说,并不陌生, 它是用来配置当项目的依赖项,接收的是一个DependencyHandler的闭包。dependencies的类型dependencies的类型可以分为以下几种 - compile - testCompile - androidTestcompile - debugCompile ...

2018-08-26 18:26:55 8991

原创 Gradle 使用技巧(二) - SO/NDK过滤

引言作为一个Android开发人员,so对于我们来讲是极其常见的,各种大厂的SDK中都包含着各种各样的so,而so也是apk瘦身的重要一环,减少so平台的数量,可以极大限度的减少apk的大小。Android 中的so先看一张官方的图:可以将so分为以下几种: - armeabi: ARM v5 这是相当老旧的一个版本,缺少对浮点数计算的硬件支持,在需要大量计算时有性能瓶颈...

2018-08-23 23:25:10 3926

原创 Gradle 使用技巧(一)

前言Gradle是使用Groovy语言构建,所以既然是语言,那么就有他的语法,而不是简单的配置项。关于Gradle有时间会出一系列的文章。1. 自定义apk输出名称 (3.0)本配置为Android studio3.0及以上的配置,3.0以下版本适用,下面的配置会将所有的Variants都输出。// 便利所有的Variants,all是迭代遍历操作符,相当于forapplica...

2018-08-22 23:40:36 480

原创 Android初级进阶之自定义View之SafeVeiw

SafeView这是我模仿的一个效果,要不断的进步,就要不断的学习。主要实现的效果是一个转动的效果和一个3D触摸效果。请看效果图(录制的图片有点大): 知识点1. Canvas2. Paint3. Shader4. Camera(不是相机)5. Animator分析整个View看上去是有四个圆组成,内中心的圆对边上有一个小圆,圆上面还有小尾巴。其实主要的原理是使用ValueAnimato

2017-09-27 15:17:21 355

原创 Android开发小技巧之商品属性筛选与商品筛选

商品属性筛选,商品筛选。

2017-09-21 23:27:47 4170

原创 Android小技巧之来不及解释了快上车--EventBus3

来不及解释了快上车--EventBus3

2016-08-10 18:01:37 916

原创 Android初级进阶之自定义时钟(二)

Android初级进阶之自定义时钟(二)

2016-08-09 15:01:26 339

原创 Android初级进阶之自定义时钟(一)

Android初级进阶之自定义时钟(一)

2016-08-08 17:22:14 460

原创 Android初级进阶之Shape

Android初级进阶之Shape

2016-08-08 17:21:28 271

原创 比较好的开源框架

前言我自己在开发中使用的一些开源库,都比较成熟了,这里将他们总结归类一下,后续会慢慢深入的剖析其中的原理综合类xUtils3一个很好用的开源库,适合初级、中级人员使用,个人建议不要再使用xUtils了,改用3,谁用谁知道,直接附上github地址:https://github.com/wyouflf/xUtils3UI类sweet-alert-dialog一个超好看的弹出窗口有木有?使用方法及其

2016-03-09 11:35:38 377

原创 Fragment中的onResume方法

Fragment中也有onResume方法

2016-03-09 10:47:32 5690

原创 ViewPager切换不重新创建Fragment

ViewPager切换不重新创建Fragment使用ViewPager经常有这样的需求,我切换页面的时候,已经有数据的页面就不让他重新加载,其实这很简单,只需要注释掉Adapter的两个方法就好: @Override public void destroyItem(ViewGroup container, int position, Object object) {

2016-03-09 10:41:57 1904

原创 Android小技巧之不缓存的ViewPager

前言在开发中我们会经常用到ViewPager这个类,比如引导页的啦,主页啦,等等之类的。一般情况下,我在ViewPger中都是放的Framgnt,这样简单有方便,但是ViewPager却会默认的缓存当前页面的最近两个页面,于是问题就产生了,我们的需求是只有切换到哪页,哪页才创建或者加载布局,但是谷歌官方的ViewPager却没有自带这个选项,就算我们用setOffscreenPageLimit(0)

2016-03-09 10:36:34 11477 5

空空如也

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

TA关注的人

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