复习移位运算
“<<” 左移:右边空出的位上补 0,相当于乘以 2
“>>” 右移:左边空出的位上,如果正数,则补 0,否则,可能补 0 或者 1,取决于计算机系统。正数情况下,相当于除以 2
“>>>” 无符号右移:左边空出的位上一律补上 0,相当于除以 2
位运算符
& 与运算符:两个操作数相同位上同时为 1,结果数相同位上才为 1
| 或运算符:两个操作数相同位上只要有一个为 1,结果数相同位上就为 1
^ 异或运算符:两个操作数相同位上不相同,结果数相同位上才为 1
灵活使用状态管理
清除特定位(即设置为 0)
mask 特定...
效果
背景在之前的项目中为了实现类似微信朋友圈的图片九宫格效果,手写了一个简单的网格控件,继承于 ViewGroup,后面因为准备做小组的技术分享,关于自定义控件的,所以就想把这个控件优化下,来作为这次分享的例子。自定义控件一般涉及测量、布局、绘制三大流程,再加上触摸事件的处理。之前的已完成的部分,已经包括了测量和布局,绘制暂时没有好想法,所以这次就想再加上触摸事件的处理。在使用微信发布朋友圈的时候,看到可以通过拖拽来重新排序图片,所以这次就加上可拖拽的功能。
思路因为网格控件是位置是比较固定的,所以可以通过实时计算每个 Item 的位置,这里我们为了方便,所以缓存了每个 Item 的位...
前言在上一篇文章 Gradle插件-基础篇 中,我们学习了 Plugin 的设计规范,并且通过一个非常简单的例子对自定义 Plugin 有了初步认识,在这篇文章中,我们来继续学习 Gradle Plugin 更为深入的知识点。
本文参考 Gradle用户手册
Gradle插件
本文涉及的所有源码都位于 github
简单扩展当我们引入 Android Plugin 时,在 android{} 有一些常用的配置,比如:
123android { compileSdkVersion 27}
如果我们想在自定义的 Plugin 中也使用这...
前言本文是 Gradle 系列的第三篇,前两篇都是关于 Gradle 多项目构建,有兴趣的同学可以去翻看下。Gradle 系列作者会一直更新下去,这些知识大部分都来自于 Gradle 用户手册,但我并不想写成翻译类型的文章,从最基础的知识开始深入,因为这样前期枯燥的理论知识会让人感到厌倦,所以从用户最常用的知识入手,再穿插必要的基础知识,最终达到知识的融会贯通。因为作者从事 Android 开发,所以会更多提及 Android 中关于 Gradle 的知识。
博客中的源码地址
Gradle插件Gradle 是非常强大的构建工具,所有的知识都围绕着 project 和 task 这两个...
前言上篇文章中,我们说到了 Gradle多项目构建 的一些知识点,但这些总归只是纸上谈兵,今天我们在实际项目中通过之前学到的知识去改造下项目的 Gradle 构建脚本,充分利用 Gradle 带来的好处。
虽然使用 Gradle 作为构建工具已经有一段时间了,但很多同学对它还是很陌生的,基本都是沿用 Android Studio 默认生成的配置,用的比较多的可能也只是 dependencies 配置,从不同的 repositories 去下载依赖,可能在需要实现一些自定义配置的时候,就去 google 后照搬代码,对其配置参数也是似懂非懂,出了问题不知道如何下手解决,所以这篇文章的主要目...
参考multi_project_builds
概述在使用 Android Studio 作为 IDE 之后,Android 项目就开始使用 Gradle 作为构建脚本,Gradle 的优点就不用我多说了,使用 Groovy 作为开发语言,配合各种 Gradle 插件和 DSL 可以实现多样化的构建过程。
Gradle 能讲的知识点很多,本文主要讲的是 Gradle 在多项目构建上提供的一些便捷的功能,希望能给大家一些启发。
名词解释
构建脚本:本文所说的构建脚本指的是 Gradle 文件,以 .gradle 为后缀的文件
项目:在多项目构建中,有根项目和子项目。根项目的称呼是相对的,以执...
感谢cpu-profiler
前言对于有一定 Android 应用开发经验的同学来说,性能优化是避不开的话题,一般来说,Android 上我们常说的性能优化包括,内存优化和界面优化,当然还有电量优化、网络优化等等。性能优化知识的学习是一个长期的过程,也不可能通过一两篇文章就能说的清楚,需要在具有相关的理论知识的前提下,同时在日常开发中加以实践,才能在这方面的工作中得心应手。
同时作者也并不是这方面的大牛,还处于入门学习的阶段,所以也会遇到初学者经常碰到的问题,其中,我个人认为阻碍初学者在这方面深入学习的一个原因是,大部分的文章都偏向于理论知识和工具使用说明,很多同学包括作者在看完这些文章...
感谢android-context
概述
本文中涉及的源码分析都是基于 Android 27
Context 又叫上下文,用于提供应用环境的信息。常用的操作包括启动 Activity、Service,或者通过 getResources() 返回 Resources 用于获取应用的资源文件,比如字符串、Drawable 等等。对于这些用法,我们就不去一一列举了,这篇文章的最终目的是,通过对 Context 体系的整体了解,能在平时的应用开发中,正确使用不同类型的 Context。首先我们看下 Context 的类图:
其中 ContextImpl 负责 Context 核心功能的实现,...
前言最近帮公司面试 Android 岗位,面试的同学大部分具有两年以上的工作经验,但发现很多同学对触摸事件的分发都不是很熟悉,有的可能还能照本宣科地说个七七八八,有的却完全不熟悉,这让我感觉到诧异,因为我认为这 Android 中非常基础的知识,不仅要熟悉其中的分发流程,还要能实现简单的涉及手势处理的自定义控件。所以,这也是这篇文章的目的,希望能通过一些触摸事件处理的实际例子,来加深对触摸事件分发的理解,同时能实现相关需求。
触摸事件简单回顾我们都知道触摸事件的分发严格意义上讲,是从 Activity 开始进行分发,但一般我们谈论的,只从 ViewGroup 开始分发。
上面的图只是粗...
基于 Android 26,分析 Android Activity 启动流程
参考startActivity启动过程分析
源码源码篇幅可能过长,所以会省略一下不必要的代码和注释
Activity12345678910111213@Override public void startActivity() { this.startActivity(intent, null); }@Override ...