自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (13)
  • 论坛 (1)
  • 收藏
  • 关注

原创 跟ViewHolder说再见!实现一个无限轮播图究竟有多简单?

去年8月份,我在Github开源了一个无限循环的轮播图库–BannerViewPager(以下简称BVP)。时至今日,一年多的时间过去了,BVP在大家的支持下已经在GitHub上收获了1.9k的Star。前段时间,我将BVP迁移到了Gitee,也很有幸受到了Gitee官方的认可,并得到了Gitee官方的推荐,短时间内在Gitee上收获了近120个Star。当然,能够却得这么大的成绩离不开大家的支持。另一方面也少不了我对BVP的悉心维护。BVP最初的目标是做一个全网最好用的轮播图库,让大家用尽可能少的代码实

2020-12-27 20:09:26 27

原创 静态代理这么用?--聊一聊ViewPagerIndicator重构的一些经验

很高兴又和大家见面了,本篇文章是《BannerViewPager系列》的第三篇。就在不久前BannerViewPager发布了2.5.0版本,在这个版本中针对Indicator部分的代码进行了重构。本篇文章带大家一起来了解下本次重构Indicator中用到的设计思想,顺便回顾及加深认识一下静态代理模式。如果你还不了解BannerViewPage可以先阅读前两篇文章:《打造一个丝滑般自动轮播无限循...

2019-11-24 12:05:21 256

原创 Java进阶--编译时注解处理器(APT)详解

上篇文章我们使用注解+反射实现了一个仿ButterKnife功能的示例。考虑到反射是在运行时完成的,多少会影响程序性能。因此,ButterKnife本身并非基于注解+反射来实现的,而是用Annotation Processor在编译时处理注解的。Annotation Processor是javac的一个工具,它用来在编译时扫描和处理注解。 一、了解Annotation Processor 自定...

2019-08-24 03:18:44 18659 8

原创 Java进阶--Java中的泛型详解

Java泛型是在JDK1.5中引进来的一个概念。泛型意为泛化的参数类型,英文为**Generics **,翻译过来其实就是通用类型的意思。泛型在平时开发中经常用到,例如常用的集合类、Class类等都是JDK给我们提供的泛型类,更多的时候我们还会使用自定义泛型。可见,泛型在Java体系中还是一个很重要的知识。那么,本篇文章我们就来系统的学习一下Java的泛型。一、为什么要引入泛型上边已经提到,泛型是在JDK 1.5引进来的一个概念。我们知道,现在声明一个List集合是需要指定List的泛型的,指定了Lis

2021-01-16 22:12:15 17

原创 Java进阶--深入理解Java的反射机制

Java

2021-01-14 23:53:35 42

原创 这可能是ViewPager2滑动冲突最全处理方案

自去年12月份ViewPager2正式版发布以后,ViewPager2已经开始逐渐替代旧版本的ViewPager。许多开发者也已经在项目中使用了ViewPager2。BannerViewPager作为一个封装ViewPager的轮播图库在第一时间迁移到了ViewPager2,并在2020年4月份发布了ViewPager2版本的BVP 3.0。相比ViewPager,ViewPager2的功能不可谓不强大,但ViewPager2却也有不少的问题。其中最大的一个问题就是滑动冲突。我们知道,两个横向滑动的View

2020-12-29 07:55:30 222

原创 深入JVM--探索Java虚拟机的类加载机制

我们知道Java语言是一门可以跨平台执行的程序语言。之所以能实现跨平台这一特性,都归根于Java虚拟机。Java虚拟机通过运行Java字节码屏蔽了系统平台的差异。在初学Java的时候相信大家都使用过javac的命令去编译Java文件,通过javac命令会编译成一个.class的字节码文件。Java虚拟机所能识别的就是字节码文件。在Java程序执行之前,虚拟机必须要将执行程序所需要的类库字节码以及程序代码的字节码先加载到虚拟机。那么,今天我们就来深入了解一下JVM加载字节码的这个过程。...

2020-12-25 00:45:24 100

原创 ButterKnife被弃用,ViewBinding才是findView的未来?

最近Android Studio更新到了4.1版本,发现项目中使用ButterKnife注解id的代码出现了警告,警告信息如下:Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them as annotation attributes从警告信息中可以看到在Gradle 5.0的插件中Resource 的Id值将不会再是final类型,因此应该避免在注解属性中使用Id。这意味着当我们把Gr

2020-11-29 01:09:14 314

原创 面试官:哈希表都不知道,你是怎么看懂HashMap的?

HashMap是Java面试中的必问考点之一,网上关于HashMap实现原理的文章数不胜数。但是在翻阅了大部分HashMap相关的文章之后,发现大多数文章都是对HashMap源码的分析,丝毫没有提到哈希表的概念。这就导致了很多人只记住了HashMap的原理,却不知哈希表为何物的奇特现象。很多情况下,面试官可能并不会直接问HashMap是如何实现的,而是抛出一个质问三连:

2020-09-25 01:34:29 165 2

原创 深入JVM--Java垃圾回收机制全面解析

提起Java的垃圾回收机制大家应该都不陌生。它不仅是面试的常客,也是Java体系中相当重要的一块知识。深入理解Java的GC机制,有助于我们在开发中提高程序的性能。本篇文章将对JVM的垃圾回收机制进行深入分析,同时还会带大家认识众多垃圾回收器的特性。一、GC机制概述在《温故知新–JVM运行时内存区域详解》这篇文章中我们对JVM的运行时内存区域进行了详细的分析。我们知道对象的创建是由JVM完成的,在对象创建的时候JVM会在Java堆中开辟一块空间用来存储这个对象。而当对象“死亡”的时候,同样是由JVM来处

2020-09-19 23:51:18 76

原创 Java进阶--深入理解Java中的字符串(二)

上篇文章我们深入分析了String的一些特性,在对String字符串拼接的分析中,我们用StringBuilder做了对比,从中认识到了StringBuilder在字符串操作中所表现出来的优秀性能。而提到StringBuilder又不得不提StringBuffer。本篇文章我们就来深入的认识一下StringBuilder和StringBuffer。...

2020-09-12 04:31:10 25

原创 Java进阶--深入理解Java中的字符串(一)

初学Java时我们已经知道Java中可以分为两大数据类型,分别为基本数据类型和引用数据类型。而在这两大数据类型中有一个特殊的数据类型String,String属于引用数据类型,但又有区别于其它的引用数据类型。可以说它是数据类型中的一朵奇葩。那么,本篇文章我们就来深入的认识一下Java中的字符串。一、String的内存分配方式我们知道,实例化一个字符串可以通过两种方法来实现,第一种最常用的是通过字面量赋值的方式来实例化字符串,另一种是通过构造方法的方式来实例化字符串。代码如下: String str1=

2020-09-08 02:08:20 83

原创 深入JVM--Java运行时内存区域详解

Java内存分配是Java基础中非常重要的一部分内容,深入理解JVM的内存分配机制将有助于我们解决开发中遇到的很多问题。同时,内存分配这一块也是面试常客。笔者作为面试官也问过不少内存分配的问题,但令笔者惊讶的是不少三五年经验的面试者对于这块内容的回答也是含糊其辞,显然没有完全搞明白。那么本节内容我们就来系统的回顾一下Java中的内存分配机制。JVM内存分配概述首先,我们应该明白一点,JVM并不是单一的存在,在Java二十多年的发展史中曾经涌现出了许多优秀的虚拟机,如大家耳熟能详的HotSpot虚拟机就是

2020-09-04 03:08:15 107

原创 学不动也要学!探究Fragmen延迟加载的前世今生

上周在[《学不动也要学!深入了解ViewPager2》](https://juejin.im/post/5df4aabe6fb9a0161104c8eb)一篇文章的留言中,大家普遍对于Fragment懒加载的问题比较关心。其实,对于Fragment懒加载问题的处理由来已久,网上不乏相关的优秀文章。但是,由于Fragment生命周期的原因使得懒加载问题的处理并不是那么的优雅。显然,Google也意识到了问题所在。因此,在Androidx的库中对于Fragment的生命周期进行了深度优化,使得我们更容易的去

2020-01-02 17:31:50 311 1

原创 学不动也要学!深入了解ViewPager2

就在上个月20号(2019年11月20号),期待已久的ViewPager2 1.0.0正式版终于发布了!不知道你是否已经蠢蠢欲动着手去改造你项目的ViewPager了?什么?你还不知道什么是ViewPager2?那么请你马上系好安全带,本篇文章将带你一览ViewPager2的风采。一、ViewPager2的新特性在今年的2月9日,谷歌官方悄然发布了一个ViewPager2 的新库,从名字就可以...

2019-12-14 16:47:19 929 1

原创 干货满满,整理给程序员的十五款开发利器

一、文档篇1.PDF神器–Easy PDF2.在线文档编辑器–腾讯文档3.笔记与文档知识库–语雀4.JSON处理工具–Bejson二、图片篇1.GIF神器–ezgif2.图片压缩神器–TinyPNG3.在线作图–ProcessOn4.Android .9阴影图生成器–Android Shadow Generator5.炫酷动画–LottieFiles6.业界大佬–PhotoS...

2019-12-05 00:27:23 201

原创 这可能是全网最好用的Banner轮播库

自上篇文章《打造一个丝滑般自动轮播无限循环Android库》发布之后BannerViewPager又迎来了众多功能更新(还不了解BannerViewPager的同学可以戳上边链接查看)。现在的BannerViewPager已经具有非常丰富的API接口,同时可以支持市面上百分之九十以上的样式。还不了解BannerViewPager的同学可以先下载Apk体验。demo apk存放在github上,下载...

2019-11-15 23:19:10 685

原创 RecyclerView/ListView嵌套CheckBox选中状态错乱解决方案

在讨论这个问题之前应该先了解ListView的复用机制 ListView复用的原理:ListView中的每一个Item显示都需要Adapter调用一次getView的方法,这个方法会传入一个convertView的参数,返回的View就是这个Item显示的View。如果当Item的数量足够大,再为每一个Item都创建一个View对象,必将占用很多内存,创建View对象(mInflater.inf...

2019-09-22 17:51:31 9311 6

原创 基于Arouter的路由实现方案

这本是一篇应该写在去年的文章,但仅仅因为...懒,这篇文章在草稿箱里静静的躺了一年多,被无限期推迟到了现在。最近刚好完成了公司项目的路由改造,借此机会来对这篇文章做一个了结。# 一、为什么要在项目中引入路由?在开始之前我们先来思考一下这个问题。为什么要在项目中引入路由?相信大家的答案可能会有所不同,但是应该也不外乎以下几点:

2019-09-18 01:33:29 298 2

原创 BannerViewPager源码剖析

产品的需求千变万化,你永远也猜不到下一步产品会给你提一个什么样的需求。因此对于一个比较人性化的Banner库来说,它也应该支持开发者去自定义任意的Item页面布局。BannerViewPager就是本着这样的思路来做的。那么究竟其内部是如何实现的呢?

2019-09-08 15:06:16 637

原创 打造一个丝滑般自动轮播无限循环Android库

最近公司项目在升级AndroidX,由于项目中用到的一些比较老的库都已停止更新维护,因此需要将这些库替换掉,其中就包括自动轮播的Banner库。恰逢笔者在之前写过一个轮播图,因此就在此基础上重构,打造出了一个全新的支持多种样式的轮播库---[BannerViewPager](https://github.com/zhpanvip/BannerViewPager/tree/master)。[BannerViewPager](https://github.com/zhpanvip/BannerViewPager

2019-09-01 22:14:13 1896

原创 手撕黄油刀--探究ButterKnife实现原理

上篇文章我们提到属性动画中由一个setInterpolator(TimeInterpolator value)的方法,这个方法是为动画设置一个插值器,可以去控制动画的速率,那么本篇文章就承接属性动画继续探究属性动画插值器用法。插值器的用法非常简单,系统给我们提供了setInterpolator(TimeInterpolator value)的方法,我们只需要传入一个插值器就可以了,我们来看一个...

2019-08-26 10:02:12 321

原创 Android动画那些事儿---属性动画(Property Animation)

上篇文章详细讲解了视图动画,也提到了视图动画存在的先天不足,即补间动画不具有交互性。动画改变的只是显示效果,其响应事件却依然还在原来的位置。在Android3.0之后引入了属性动画,...

2019-08-19 15:48:01 135

原创 Android动画那些事儿---视图动画(View Animation)

在Android系统中,谷歌提供了大量的动画Api来满足开发者产品中各式各样的动画需求。从Android 2.0时期的View动画到Android3.0时期的属性动画,再到Android5.0之后引入的转场动画以及后来为了能够让开发者快捷的实现弹性动画在support25中引入的SpringAnimation等等,各式各样的动画框架层出不穷。尤其对于初学者来说,见到炫酷的动画特效时直呼牛批,让自己...

2019-07-20 04:01:55 139

原创 Java进阶--Java注解及其实例应用

Java注解在我们项目开发 中是非常常见的。比如经常用到的几种java内置的注解: @Override,表示当前的方法定义将覆盖超类中的方法。 @Deprecated,表示当前方法即将废弃,不推荐使用。 @SuppressWarnings,表示忽略编译器的警告信息。对于上面几个注解想必大家都不会陌生。除此之外,我们还经常在一些第三方框架中看到一些自定义注解...

2018-08-25 18:34:47 733

原创 自定义View之弹性滑动的LockView

本篇文章我们来实现一个带有弹性滑动效果的自定义View。当然,文章的侧重点依然是自定义View。但是还会涉及到一些其他方面的知识,比如View的事件分发以及如何实现带有弹性的滑动。还是老规矩,看下最终实现效果。 ...

2018-07-14 20:30:41 1103 5

原创 Android列表小部件(Widget)开发详解

Widget是Android应用小部件,它可以作为一个微型视图嵌套在其他应用程序中(比如可以放置在桌面),并接收周期性更新。通常来说,小部件可以通过与App交互更方便的将App的内容展示给用户,同时它也是App的一个便捷入口。本篇文章来一起来探讨Android小部件的相关知识,并通过一个在Widget中嵌套了一个列表的例子来认识Android小部件。国际惯例先看demo效果图: 本篇文章...

2018-06-21 13:35:28 26722 11

原创 当Retrofit遇上HTTPS--关于HTTPS的那些事

* 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布由于前不久苹果公司已经强制IOS应用必须使用HTTPS协议开发,虽然Google没有强制开发者使用HTTPS,但相信不久的将来Android也会跟随IOS全面转向HTTPS。因此,HTTPS的学习也是相当重要。本篇文章涉及到的代码不多,主要内容是对HTTPS协议的讲解,最后将结合Retrofit实现HTTPS的单双向认证。...

2018-02-12 01:24:11 5418 5

原创 (三)Rxjava2+Retrofit之文件上传与下载

* 本文同步发表在简书,转载请注明出处。 上篇文章主要对Retrofit做了封装,使之使用起来更加方便。本篇文章将根据上篇文章的封装架构实现文件上传服务器的功能。文章将从以下几点实现对Retrofit上传文件的讲解一 使用Retrofit上传文件时遇到的坑二 实现单文件上传的两种方法三 实现多文件上传一、使用Retrofit上传文件时遇到的坑。项目中注册接口中有上传头像的功能,本以为上传

2017-10-26 17:45:01 2770 13

原创 追根溯源—— 探究Handler的实现原理

一、Handler的使用场景 Android系统中更新UI只能在主线程中进行,如果在子线程中访问UI程序会抛出CalledFromWrongThreadException的异常。而且Android又不建议在主线程中进行耗时操作,不然有可能会出现ANR问题。因此对于像网络请求、数据库查询这样的耗时操作一般是放在子线程中执行的。当子线程获取数据成功以后需要将数据更新到UI界面,由于UI更新不能在子

2017-09-10 02:27:27 738

原创 Android夜间模式的实现方案

对于一款阅读类的软件,夜间模式是不可缺少的。最初看到这个需求时候觉得无从下手,没有一点头绪。后来通过查阅资料发现Android官方在Support Library 23.2.0中已经加入了夜间主题。也就是只需要通过更换主题便可实现夜间模式的切换。下面截取项目实现的夜间模式效果图: 效果看起来非常nice,没有闪屏效果,过度看起来也比较平滑。那么如何实现夜间模式呢?下面将从以下几个方面来实现夜间

2017-07-27 23:45:44 21346 26

原创 Rxjava2+Retrofit之Token自动刷新

* 本文同步发表在简书,转载请注明出处。 上篇文章主要对Retrofit做了封装,使之使用起来更加方便。在之前的封装中token过期再次刷新token后需要手动调用之前的请求,这种处理方式不够优雅,因此,在原有的基础上,本篇文章将基于上篇文章的封装并优化Token验证机制。使之能够实现过期自动刷新并重新调用请求。 接下来将通过以下几个小节来学习如何实现token验证。 - 为什么要引入...

2017-07-27 00:34:26 9917 7

原创 (一)Rxjava2+Retrofit完美封装

* 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布要说2016年最火的Android技术是什么,毫无疑问肯定是RxJava+Retrofit+Mvp。现如今2017年也已经过了快一半了。相信做android开发的小伙伴对RxJava和Retrofit也不再陌生。即使没有刻意的去学习过,也应该对RxJava和Retrofit有个一知半解。去年的时候学习了Rxjava和Retr...

2017-04-30 03:29:43 25972 29

原创 BaseActivity中封装通用的Toolbar

之前写过一篇关于Toolbar的文章,最近在搭建新项目时对Toolbar做了简单的封装。封装的预期目标是只在BaseActivity中引入Toolbar,然后子Activity通过继承BaseActivity就能显示Toolbar。话不多说,看看效果如何实现。 因为我们使用toolbar作为titlebar,因此首先需要去掉Actionbar,在style文件下修改默认Theme的parent为

2017-04-28 23:35:33 7430 4

原创 建造者模式打造随心所欲的Android对话框

可能有人要说不就是自定义dialog吗,网上一搜案例demo多得是,而且也不难,没什么好讲的。确实百度一下自定义的dialog数不胜数。但是大多数文章都是单一的布局实现单一的样式。假如说项目中有多个不同布局的dialog,比如三种、五种甚至十种,当然我只说假如。如果你的项目只有一种样式的对话框。那么也没有必要再看再往下看了。 如上所述,碰到多种样式的对话框应该怎么办呢?总不能项目需要几种就去写几种

2017-04-15 00:11:45 721

转载 【Android 性能优化】—— 详解内存优化的来龙去脉

APP内存的使用,是评价一款应用性能高低的一个重要指标。虽然现在智能手机的内存越来越大,但是一个好的应用应该将效率发挥到极致,精益求精。 本文是【Android 性能优化】系列的第二篇文章,我们在第一篇【Android 性能优化】—— UI篇中主要介绍了Android界面的优化的原理以及方法,这一篇中我们将着重介绍Android的内存优化。本文的篇幅很长,但是请不要嫌烦,因为每看一节,你就多了一份

2017-04-13 23:09:46 1269

转载 【Android 性能优化】—— UI篇

原文链接:http://m.blog.csdn.net/article/details?id=61920222 1. 前言 随着最近几年移动市场蓬勃发展,引来大批人员投入到Android、IOS的开发前线,与此同时全国各大培训机构每月都培养出成千上万名号称拥有2到3年工作经验的开发者。当然,这都已经不是什么秘密了,从目前来看,中国IT行业的主力军基本上都走过培训的道路。 但问题是,这号称2~

2017-03-27 16:33:56 703

原创 自定义View之颜色渐变折线图

首先看下要实现的效果图,图片录制效果不好,渐变颜色没有完全显示出来,以至于下半部分渐变色变成了白色。 一、定义LineChartView类并继承View。 二、添加在定义属性。以在value目录下创建attrs.xml文件,文件中我们可以定义一些用到的属性,比如折线颜色、字体大小等属性。文件内容如下:<?xml version="1.0" encoding="utf-8

2017-03-16 14:14:16 4767 9

原创 Android 搜索关键字高亮显示及开发中遇到的坑

公司项目中有一个搜索功能,需求时要把搜索关键字高亮显示出来。本来觉得是一个比较简单的问题,开发过成也比较顺利。但在测试阶段还是出了些问题。而且有些问题还挺莫名其妙!下面分析开发中遇到的几个问题。最初的想法,定义一个工具类,然后封装一个处理高亮的方法。嗯!没问题,就这样!/** * Created by zhpan on 2016/10/24. */public class TextHighLi

2016-12-15 14:53:52 3878 7

原创 Android数据库SqLite实现增删改查

数据库操作的一般流程有以下步骤: 1.首先,写一个自己的数据库操作帮助类,这个类继承自Android自带的SQLiteOpenHelper. 2.在自己的DAO层借助自己的Helper写数据库操作的一些方法 3.Activity调用DAO层的数据库操作方法进行操作下面通过一个存储搜索记录的简单例子来了解Android中数据库操作。 一、写一个自己的数据库操作帮助类DbHelper,这个类继承

2016-12-12 17:10:03 623

WidgetDemo.zip

Androiod 桌面Widget开发的一个的示例

2019-09-03

ViewPager实现图片自动轮播无限循环(完美流畅版)

详情请参看博客http://blog.csdn.net/qq_20521573/article/details/52037929

2016-07-26

接口回调实现简易购物城功能

重点是接口回调的应用,不是购物车实现。下载前请看清楚说明。 详情参看博客:http://blog.csdn.net/qq_20521573/article/details/52054774

2016-07-28

ViewPager2Sample.7z

ViewPager2 Sample 详情请参考文章 https://blog.csdn.net/qq_20521573/article/details/103484026

2019-12-14

ExpandableListView

Item可以展开的ListView,很详细。 详情参看http://blog.csdn.net/qq_20521573/article/details/52665196

2016-09-26

ListView中嵌套CheckBox

下载积分被CSDN设置了50积分,非本人所为。没有积分的可以参看这篇文章。文章中代码基本都贴出来了。https://blog.csdn.net/qq_20521573/article/details/52073472

2016-09-25

CoordinatorLayout

http://blog.csdn.net/qq_20521573/article/details/52566994

2016-09-18

Android中的Toolbar详解

关于如何使用Toolbar请参看博客:http://blog.csdn.net/qq_20521573/article/details/52073472

2016-07-30

接口回调实现简易购物车功能

重点是接口回调的应用,不是购物车实现。下载前请看清楚说明。 详情参看博客:http://blog.csdn.net/qq_20521573/article/details/52054774

2016-07-28

ViewPager实现图片自动轮播和无限循环(完美流畅)

详情请参看博客http://blog.csdn.net/qq_20521573/article/details/52037929

2016-07-26

面向对象思想实现AsyncTask类的复用

用面向对象思想实现AsyncTask类的复用

2016-07-25

解析json实现listview,listView优化、子控件点击事件等实现

该实例实现了请求网络数据并解析Json适配listView,并对listview进行优化、图片缓存、和子控件的点击事件的实现。

2016-07-24

android省市区三级联动

使用PickerView控件实现省市区三级联动的效果

2016-07-15

麻烦管理员帮删下资源,昨天资源上传有误。谢谢

发表于 2016-10-01 最后回复 2016-10-01

空空如也

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

TA关注的人 TA的粉丝

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