1 | ext { |
Android Nested Scrolling
Android常规的Touch事件传递机制是自顶向下,由外向内的,一旦确定了事件消费者View,随后的事件都将传递到该View。因为是自顶向下,父控件可以随时拦截事件,下拉刷新、拖拽排序、折叠等交互效果都可以通过这套机制完成。Touch事件传递机制是Android开发必须掌握的基本内容。但是这套机制存在一个缺陷:子View无法通知父View处理事件。NestedScrolling就是为这个场景设计的。
将MIUI8放入OnePlus 3T的半小时
一加3T买了几个月了,偶尔逛一下论坛,发现MIUI8 ROM的帖子一直排在前面。想一想上一次用MIUI还是用小米2s的时候,抱着尝试的心态决定刷机。
查了一些教程,下载工具和ROM,一切都比较顺利。ROM是xs的MIUI8最新版,很多dalao免费分享自己的劳动成果,让普通用户也可以用自己的设备体验不同品牌的系统,值得点赞。
当一台手机散落进相框……
当一台手机散落进相框,便成就了另一种美感。
SwipeRefreshLayout源码分析
SwipeRefreshLayout已经推出许久了,很多App都在使用,这里对其实现方式做个分析。下拉刷新控件其实是很好的学习Android的Touch事件传递的用例,尤其是其中onInterceptTouchEvent()
和onTouchEvent()
方法的实现,对于自定义ViewGroup的事件处理部分有借鉴意义。
这篇文章分析传统的基于Touch事件传递流程的下拉刷新逻辑。(还有一个逻辑分支是NestedScroll,先留个坑。)
获取包下所有Activity信息
通过PackageManager
获取某个包下所有的Activity
的信息。
1 | PackageManager pm = getPackageManager(); |
Android Path.FillType属性
FillType从名称上看就是填充类型,FillType是Path内部的枚举,所以指的是Path的填充类型。通常我们使用1
canvas.drawPath(path, paint);
填充或者描边路径,而FillType就是填充或者描边的规则。
FillType有4种取值:WINDING
, EVEN_ODD
, INVERSE_WINDING
, INVERSE_EVEN_ODD
,默认为WINDING
。
先看一张截图,前两列表示WINDING
和EVEN_ODD
类型的效果,后面四列分别为INVERSE_WINDING
和INVERSE_EVEN_ODD
的填充和描边效果。
对上面的效果进行解释:
WINDING
:以Path的最外层闭合图形为准,填充内部所有区域;描边所有PathEVEN_ODD
:对于path包含的每一层闭合图形,由内向外从1开始标记,单数闭合图形内部进行填充;描边所有PathINVERSE_WINDING
:和WINDING
相反,填充剩余区域。描边见(1)INVERSE_EVEN_ODD
:和EVEN_ODD
相反,填充剩余区域。描边见(1)
(1): 对
INVERSE_
开头的两种类型的描边处理,也和名称一样,取反后进行描边。
你也许会注意到,带有INVERSE_
开头的填充类型,绘制时会在最外层再加一层边框,边框宽度就是Paint的strokeWidth
,并且不会小于1像素。
《Gradle for Android》笔记(8):CI和高级自定义构建
《Gradle for Android》笔记(7):创建Task和Plugin
Groovy概览
- 输出
println ‘Hello, Groovy!’
- 无方法括号。
- 无分号结尾
- 不需要namespace。(对比
System.out.println
)
字符串可以使用单引号和双引号,双引号可以嵌入表达式。$作为嵌入表达式标记。
1
2
3def name = 'Andy'
def greeting = "Hello, $name!"
def name_size "Your name is ${name.size()} characters long."动态修改代码体:
《Gradle for Android》笔记(6):测试
单元测试 - JUnit
- 默认JUnit测试文件在main同级的test目录下。
- JUnit测试成功输出:
BUILD SUCCESS
- 包含多重构建的项目,可以添加如
testPaid
的目录进行针对性测试。 - Gradle命令。
1
2
3
4
5
6
7
8// 运行测试
gradlew test
// 针对某个构建测试
gradlew testDebug
// 在一个构建测试失败之后,继续执行其他构建。
gradlew test —continue
// 指定测试类
gradlew testDebug —tests=“*.LogicTest*