Android
文章平均质量分 91
程序员的自我反思
这个作者很懒,什么都没留下…
展开
-
Picasso源码完全解析——学习其优秀设计思想
前言图片加载框架Picasso相信大家都已经用过很多次了,对它们的使用方法也早就熟稔于心了,那么本文就Picasso的源码进行剖析,学习设计者的优秀的代码设计理念和方法。几个重要的类在源码解析开始之前,笔者认为有必要对Picasso的几个重要的类进行简单梳理,以便于后面遇到这些组件的时候可以马上知道它的作用是什么。1、OkHttp3DownloaderPicasso借助该类来下载图片,并...原创 2019-09-17 10:54:18 · 616 阅读 · 0 评论 -
Android 实现带指示器的自动轮播式ViewPager
前言最近在做项目的时候,有个需求就是实现自动轮播式的ViewPager,最直观的例子就是知乎日报顶部的ViewPager,它内部有着好几个子view,每个一段时间便自动滑动到下一个item view,而底部的指示器也随之跟着改变。抱着学习和分享的目的,笔者把轮播式ViewPager写成了一个独立的控件,以方便以后的使用。原创 2016-10-04 16:09:28 · 8817 阅读 · 7 评论 -
Android View 事件分发机制源码详解(ViewGroup篇)
前言我们在学习View的时候,不可避免会遇到事件的分发,而往往遇到的很多滑动冲突的问题都是由于处理事件分发时不恰当所造成的。因此,深入了解View事件分发机制的原理,对于我们来说是很有必要的。由于View事件分发机制是一个比较复杂的机制,因此笔者将写成两篇文章来详细讲述,分别是ViewGroup和View。因为我们平时所接触的View都不是单一的View,往往是由若干个ViewGroup组合而成,而原创 2016-04-30 21:05:41 · 12515 阅读 · 13 评论 -
Android View学习笔记(三):Scroller的原理剖析及使用(上)
一、前言 上一篇文章中,讨论了View的几种基本滑动方式,但是这些滑动方式是生硬的,在一瞬间完成的,这给用户非常不好的体验,所以为了提高用户体验,我们需要将View弹性滑动。什么是弹性滑动?就是一个View是在一段时间内完成滑动的,而不是一瞬间完成的,从原理来说,将一次滑动分解为若干个小的滑动,在一小段时间内完成,那么连贯起来就能看做一次弹性滑动。本文将以弹性滑动方式之一:Scroller来讲述其原创 2016-04-21 16:41:19 · 2097 阅读 · 4 评论 -
Android 自定义View:教你轻松实现内存清理加速球的效果
前言用过猎豹清理大师或者相类似的安全软件,大家都知道它们都会有一个功能,那就是内存清理,而展现的形式是通过一个圆形的小球来显示内存大小,通过百分比数字以及进度条的形式来显示清理的进度。本文将对该效果的实现过程进行详细讲述,但不涉及内存清理的实现。预览我们先来看看最终实现的效果是怎样的(gif效果有点差): 从上面的图片,我们可以看出: ①当加速球View显示的时候,进度条以及百分比数字会从0原创 2016-08-26 15:42:37 · 3105 阅读 · 2 评论 -
EventBus 3.0进阶:源码及其设计模式 完全解析
前言在上一篇文章:EventBus 3.0初探: 入门使用及其使用 完全解析中,笔者为大家介绍了EventBus 3.0的用法,相信大家对其的使用也比较熟悉了。我们学习使用一个开源库,不但要知道其怎么使用,也要对其的实现原理有一定的熟悉,学习并借鉴它优秀的实现思想,这样对我们以后的开发又或者是自己的开源项目都有很大的意义。那么今天的文章,就是EventBus 3.0的进阶,剖析它的实现原理以及对其使原创 2016-09-14 00:31:48 · 3330 阅读 · 1 评论 -
Android 自定义Toast:轻松实现深度可定制化的Toast
前言用过系统自带的Toast的都知道,android自带的吐司比较难看,而且样式单一,最重要的是不能自由选择动画,这样的吐司很难用在一个精美的应用上,因此,我们来自行实现一个自定义的Toast:XToast,来取代系统自带的Toast。当然了,以下实现的自定义Toast是与系统Toast有区别的,下面会提到。使用方式&预览我们来看看怎么使用XToast,通过提供的一系列的set方法,可自行设置XTo原创 2016-08-19 22:25:33 · 2415 阅读 · 3 评论 -
EventBus 3.0初探: 入门使用及其使用 完全解析
前言EventBus是greenrobot在Android平台发布的一款以订阅——发布模式为核心的开源库。EventBus翻译过来是事件总线的意思,可以这样理解:一个个事件(event)发送到总线上,然后EventBus根据已注册的订阅者(subscribers)来匹配相应的事件,进而把事件传递给订阅者,这也是观察者模式的一个最佳实践。那么EventBus可以用到什么地方呢?我们平时开发的原创 2016-09-08 21:22:48 · 2244 阅读 · 0 评论 -
Retrofit2 初探:入门及其使用 完全解析
前言相信大家对Retrofit一定不陌生,或多或少都听过它的名字,它是一个最近很流行也很好用的网络请求库,它对okHttp进行了封装,加上利用了Java注解等特性,使得它能适应于灵活多变的网络请求情景。那么接下来我们一起学习怎样使用Retrofit2。官网及相关文件在正式使用Retrofit2之前,我们要先准备好相应的文件: Retrofit2 GitHub地址 Retrofit2 官网地址原创 2016-08-02 14:07:24 · 7264 阅读 · 3 评论 -
自定义控件:实现半圆滚动菜单效果
前言本自定义控件参考自鸿洋大神的自定义控件(原文地址),基于原来的控件效果进行修改,着重实现了以下效果:位置自动修正以及滑动结束的回调。我们先来看看效果图: 上面的图片是一个ImageView,与控件无关,是为了验证回调功能。接着是位置自动修正: 位置自动修正的意思是说,每个item view经过滑动后,停留的位置不是随意的,而是固定在某个区域之内,就如每个item view装在一个个格子里面。原创 2016-07-29 21:49:14 · 5159 阅读 · 2 评论 -
Android View学习笔记(一):View基础知识
一、简介 在安卓中,View代表视图,是安卓中十分重要的一个概念,重要程度不亚于四大组件,用户每时每刻都在与View打交道,包括展示数据、事件传递等。因此,熟练掌握View的应用以及原理是Android进阶的必经之路。最近笔者在学习任玉刚著的《Android 开发艺术探索》中的View的相关知识,便把学习心得及总结记录下来,与大家交流学习。二、View的定义 引用官方文档的描述:A View o原创 2016-04-17 22:31:35 · 2425 阅读 · 0 评论 -
实现折叠式Toolbar:CollapsingToolbarLayout 使用完全解析
简介在各种不同的应用中,大家可能会经常见到这样一个效果:Toolbar是透明的,有着一个背景图片以及大标题,随着页面向上滑动,其标题逐渐缩放到Toolbar上,而背景图片则在滑动到一定程度后变成了Toolbar的颜色,这种效果也即是折叠式效果。其实这种效果在GitHub上面已经有很多开源库实现了,但是Google在其推出的Design Library库中也给出了一个这种控件,让我们很方便地实现了这种原创 2016-10-20 12:29:51 · 32448 阅读 · 4 评论 -
Android状态保存与恢复流程 完全解析
前言很久没写过文章了,最近一段时间忙着各种各样的事情,难得寒假有时间便把最近所学的整理及记录下来与大家分享。本篇文章是关于Android的状态保存与恢复的源码分析。 对于一个Activity或者View来说,状态的保存与恢复是必不可少的,最常见的一种情况是切换屏幕方向了,如果由竖屏切换为横屏,那么必定会经历Activity的摧毁与重建,那么它所对应的View视图也会被摧毁和重建,如果此时没有对Vi原创 2017-01-18 14:08:28 · 5291 阅读 · 0 评论 -
Android源码探究:Android Native层消息机制完全解析
#前言前文详细分析了Java层的消息循环机制的工作原理,在分析MessageQueue的过程中,我们遇到了nativePollOnce()和nativeWake()方法的调用,下面我们就深入到Native层的消息机制来看看它背后的运作原理。#Native层的消息机制一、NativeMessageQueue的相关逻辑1、NativeMessageQueue的构建首先,我们来看看Java层的...原创 2019-05-20 17:07:31 · 2477 阅读 · 1 评论 -
Android源码探究:Android Java层消息机制完全解析
#概述Android的消息机制对我们开发者来说应该是很熟悉的,其中最常见的用法就是利用Handler切换到主线程然后更新UI,消息机制的用法当然不仅仅局限于这个场景,但总的来说,消息机制解决了线程间和线程内的消息通信的问题。Android消息机制是指以Handler为上层接口,MessageQueue和Looper为底层支撑的工作过程。下面简单介绍一下这三个类:①Handler是我们经常接触的...原创 2019-05-20 17:05:23 · 509 阅读 · 0 评论 -
Android源码探究:Activity启动流程完全解析
概述本文主要内容是从源码角度进行Activity启动流程的分析。由于整个启动的过程非常长并且代码非常多,同时受限于笔者的水平,所以本文不会细致到解释每一行的代码的具体作用,只能抽取处关键部分的代码就主体流程进行分析,如有错误之处,希望批评指出。行文脉络由于本文会非常长,为了方便读者的理解,首先给出笔者的行文脉络。本文主要沿着:在应用程序1的Activity A内打开另一个应用程序2的Acti...原创 2019-05-07 11:37:41 · 1672 阅读 · 2 评论 -
浅谈Android实现圆形头像效果的几种思路和方法
前言我们在开发的过程中,经常会遇到如下的需求:在界面上展示圆形的用户头像,其实这个需求很普遍并且实现难度也不大,网上也有很多相关的教程,那么本文主要来对几种实现思路和方法进行一次总结,方便以后需要时可以随时查阅。两个核心方法对于圆形头像的实现,实际上就是对长方形头像的Bitmap作某些处理,以达到变换成圆形头像的效果。我们自然而然地想到了用Canvas和Paint来处理,利用它们我们能实现很...原创 2019-04-24 18:54:33 · 2342 阅读 · 0 评论 -
Java源码探究:ThreadLocal工作原理完全解析
#前言ThreadLocal是一个平时Android开发中并不常见的类,正因为少接触,所以对它的了解并不多。但实际上,它对我们常用的Handler通信机制起着重要的支撑作用。ThreadLocal,顾名思义,线程封闭的变量,也即该变量的作用范围是以当前线程为单位,别的线程不能访问该变量。ThreadLocal对外提供了get和set方法,用于提供线程独占的变量的访问途径。下面我们先从使用方法来了...原创 2019-04-16 11:20:26 · 546 阅读 · 0 评论 -
JNI 入门(一):从Hello World开始
#前言最近在学习JNI的相关知识,即Java Native Interface,它提供了若干API使得Java和C/C++的通信成为可能。我们知道,Java代码运行于Java虚拟机中,独立于某个平台,这也是Java的可移植性的优点。而C/C++代码运行于Windows或Linux平台。为了实现Java和其他代码的交互,JNI应运而生。最简单的就是,就是你在java中声明一个方法,但方法的具体实现...原创 2019-03-18 00:47:00 · 652 阅读 · 3 评论 -
利用ViewPager实现3D画廊效果及其图片加载优化
前言对于ViewPager,相信大家都已经很熟悉了,在各种切换场景比如Fragment切换、选项卡的切换或者顶部轮播图片等都可以用ViewPager去实现。那么本篇文章带来ViewPager的一种实现效果:3D画廊。原创 2017-04-13 15:58:40 · 5496 阅读 · 1 评论 -
RecyclerView进阶:使用ItemTouchHelper实现拖拽和侧滑删除
有时候我们可能需要实现侧滑删除的功能,比如知乎首页的侧滑删除,又或者长按Item进行拖动与其他Item进行位置的交换,但RecyclerView没有提供现成的API供我们操作,所幸SDK提供了ItemTouchHelper这样一个工具类帮助我们快速实现以上功能。不多说别的,我们来介绍一下ItemTouchHelp的用法及自定义动画效果原创 2017-01-31 15:04:36 · 36985 阅读 · 28 评论 -
OkHttp3使用解析:实现下载进度的监听及其原理简析
前言本篇文章主要介绍如何利用OkHttp3实现下载进度的监听。其实下载进度的监听,在OkHttp3的官方源码中已经有了相应的实现(传送门),我们可以参考它们的实现方法,并谈谈它们的实现原理,以便我们更好地理解。原创 2017-02-21 18:39:34 · 10978 阅读 · 9 评论 -
Android 如何保存与恢复自定义View的状态?
在上一篇文章Android状态保存与恢复流程 完全解析,笔者详细地介绍了Activity、Fragment、View等的状态保存与恢复流程,相信大家对状态的保存与恢复都有了一定熟悉。而这篇文章就着重介绍自定义View该怎样保存与恢复状态,因为每个自定义View都是不同的情况,所以我们一般需要重写View的onSaveInstanceState()或onRestoreInstanceState()原创 2017-01-20 18:40:15 · 6630 阅读 · 4 评论 -
Android View源码解读:浅谈DecorView与ViewRootImpl
前言对于Android开发者来说,View无疑是开发中经常接触的,包括它的事件分发机制、测量、布局、绘制流程等,如果要自定义一个View,那么应该对以上流程有所了解、研究。本系列文章将会为大家带来View的工作流程详细解析。在深入接触View的测量、布局、绘制这三个流程之前,我们从Activity入手,看看从Activity创建后到View的正式工作之前,所要经历的步骤。以下源码均取自Android原创 2016-05-22 21:18:24 · 13439 阅读 · 8 评论 -
Android View 深度分析requestLayout、invalidate与postInvalidate
前言前几篇文章中,笔者对View的三大工作流程进行了详细分析,而这篇文章则详细讲述与三大工作流程密切相关的两个方法,分别是requestLayout和invalidate,如果对Viwe的三个工作流程不熟悉的读者,可以先看看前几篇文章,以便能更容易理解这篇文章的内容。原创 2016-06-04 10:03:59 · 67166 阅读 · 31 评论 -
Android View 布局流程(Layout)完全解析
前言上一篇文章,笔者详细讲述了View三大工作流程的第一个,Measure流程,如果对测量流程还不熟悉的读者可以参考一下上一篇文章。测量流程主要是对View树进行测量,获取每一个View的测量宽高,那么有了测量宽高,就是要进行布局流程了,布局流程相对测量流程来说简单许多。那么我们开始对layout流程进行详细的解析。ViewGroup的布局流程上一篇文章提到,三大流程始于ViewRootImpl#p原创 2016-05-28 13:31:34 · 7263 阅读 · 3 评论 -
Android IPC机制(五):详解Bundle与“信使”——Messenger
本文介绍Bundle和Messenger的进程间通讯方式原创 2016-04-16 10:29:05 · 5025 阅读 · 0 评论 -
Android IPC机制(四):细说Binder连接池
结合代码分析Binder连接池的使用原创 2016-04-14 13:27:48 · 6045 阅读 · 10 评论 -
Android IPC机制(二):AIDL的基本使用方法
一、前言上一篇博客,讲述了实现序列化和反序列化的基本方式,是实现进程间通讯的必要条件,而这篇博客主要来讲一讲AIDL,通过展示AIDL的基本使用方法来引出IPC的核心:Binder。二、什么是AIDL?AIDL全称:Android Interface Definition Language,即Android接口定义语言。由于不同的进程不能共享内存,所以为了解决进程间通讯的问题,原创 2016-04-10 13:22:49 · 1797 阅读 · 3 评论 -
Android IPC机制(一):序列化与反序列化
一、前言对于Android开发者来说,IPC机制肯定不陌生,而作为Android的进阶也必须掌握IPC机制。所谓IPC机制,即进程间通讯(Inter-Process Communication)。我们的应用有时候出于业务需要,可能是多进程的,而由于不同进程是不共享一个内存池的,所以进程之间不能直接通讯,而要通过一些特别的机制才能通讯,所以IPC机制是解决进程间通讯的一个方案。为了熟练掌握And原创 2016-04-09 10:49:56 · 1992 阅读 · 0 评论 -
(干货) Android Volley框架源码详细解析
经常接触Android网络编程的我们,对于Volley肯定不陌生,但我们不禁要问,对于Volley我们真的很了解吗?Volley的内部是怎样实现的?为什么几行代码就能快速搭建好一个网络请求?我们不但要知其然,也要知其所以然,抱着这样的目的,本文主要详细讲述Volley的源码,对内部流程进行详细解析。Part 1.从RequestQueue说起原创 2016-04-26 12:29:40 · 4021 阅读 · 0 评论 -
Android IPC机制(三):浅谈Binder的使用
从源码角度分析AIDL的工作原理原创 2016-04-11 20:19:54 · 5986 阅读 · 0 评论 -
Android Studio使用技巧:导入第三方类库
很多时候,我们做项目需要用到第三方的类库,比如说需要二维码扫描,那么我们会用到别人封装好的类库,那么,在我们自己的项目中,怎么导入第三方类库作为自己项目的一个Module呢?这篇文章将会解决这个问题。Step 1:首先,新建一个自己的项目,这里命名为myapp1.如下图所示:Step 2:点击File,选择New,选择Import Module,选择你需要导入的第三方类库。原创 2016-03-18 17:36:24 · 1353 阅读 · 0 评论 -
Android Demo:读取本地图库与调用摄像头拍摄
本文主要介绍如何读取Android本地图库的图片以及调用安卓的摄像头进行拍摄。一、布局布局比较简单,MainActviivty的布局文件只有两个按钮,一个是读取图库的,另一个是打开摄像头的,另外ResultActivity的布局只有一个ImageView,用于显示所选择的图片或者所拍摄的图片。二、读取图库由于需要打开安卓自带的图库,所以我们需要用到Intent这个类原创 2016-03-05 23:41:24 · 3430 阅读 · 0 评论 -
UI组件:PopupWindows的详细使用(一)
一、定义在官方文档里面,对PopupWindow做出了以下定义:A popup window that can be used to display an arbitrary view. The popup window is a floating container that appears on top of the current activity.意思就是这个popup w原创 2016-03-16 19:47:55 · 1800 阅读 · 0 评论 -
揭开RecyclerView的神秘面纱(二):处理RecyclerView的点击事件
前言上一篇文章揭开RecyclerView的神秘面纱(一):RecyclerView的基本使用中,主要讲述了RecyclerView的基本使用方法,不同的布局管理器而造成的多样化展示方式,展示了数据之后,一般都会与用户进行交互,因此我们需要处理用户的点击事件。在ListView和GridView提供了onItemClickListener这个监听器,然而我们查找RecyclerView的API却没有原创 2016-05-11 08:37:09 · 4434 阅读 · 1 评论 -
揭开RecyclerView的神秘面纱(一):RecyclerView的基本使用
详细讲述RecyclerView的用法原创 2016-05-09 19:47:58 · 5355 阅读 · 0 评论 -
Android View 测量流程(Measure)完全解析
本篇文章主要内容是:详细讲述View的测量(Measure)流程,主要以源码的形式呈现原创 2016-05-24 22:15:21 · 19170 阅读 · 14 评论 -
Android View 绘制流程(Draw) 完全解析
前言前几篇文章,笔者分别讲述了DecorView,measure,layout流程等,接下来将详细分析三大工作流程的最后一个流程——绘制流程。测量流程决定了View的大小,布局流程决定了View的位置,那么绘制流程将决定View的样子,一个View该显示什么由绘制流程完成。原创 2016-06-02 22:49:51 · 10747 阅读 · 5 评论 -
Android Volley详细解析(一):Volley基本用法
一、什么是Volley? Volley,是谷歌官方于2013年发布的用于Android平台的网络通信库,也即是说它内部封装了HttpURLConnection等常用于网络通信的类。平时我们写网络通信的业务逻辑的时候,通常是一大段一大段的HttpURLConnection的逻辑,这给我们造成了很多麻烦,如可能存在很多重复的代码或者效率过低又或者存在并发问题。而Volley的出现,极大简化了网络通信的原创 2016-04-23 16:08:35 · 6267 阅读 · 0 评论