
以前有句话,“产品三件宝:弹窗、浮层和引导”。说的是出于运营需求,规划产品不完整,PM经常提一些浮层之类的需求的情况。实际产品中,确实会出现很多弹窗、浮层之类的需求,常见的场景比如:公告、更新、活动、分享、引导等等。

以前有句话,“产品三件宝:弹窗、浮层和引导”。说的是出于运营需求,规划产品不完整,PM经常提一些浮层之类的需求的情况。实际产品中,确实会出现很多弹窗、浮层之类的需求,常见的场景比如:公告、更新、活动、分享、引导等等。
1 | ext { |

Android常规的Touch事件传递机制是自顶向下,由外向内的,一旦确定了事件消费者View,随后的事件都将传递到该View。因为是自顶向下,父控件可以随时拦截事件,下拉刷新、拖拽排序、折叠等交互效果都可以通过这套机制完成。Touch事件传递机制是Android开发必须掌握的基本内容。但是这套机制存在一个缺陷:子View无法通知父View处理事件。NestedScrolling就是为这个场景设计的。

一加3T买了几个月了,偶尔逛一下论坛,发现MIUI8 ROM的帖子一直排在前面。想一想上一次用MIUI还是用小米2s的时候,抱着尝试的心态决定刷机。
查了一些教程,下载工具和ROM,一切都比较顺利。ROM是xs的MIUI8最新版,很多dalao免费分享自己的劳动成果,让普通用户也可以用自己的设备体验不同品牌的系统,值得点赞。

更新版本:link
如果你的博客也和我一样是使用Hexo或者其他静态博客框架搭建的话,你可能也需要上传图片到七牛,然后将图片链接填写到Markdown中;可能你也和我一样,厌烦了在七牛后台上传图片。可能你找到了喜欢的上传工具,但是我还没有,所以就有了Qiniu Uploader for Dropzone3和这篇博客。

SwipeRefreshLayout已经推出许久了,很多App都在使用,这里对其实现方式做个分析。下拉刷新控件其实是很好的学习Android的Touch事件传递的用例,尤其是其中onInterceptTouchEvent()和onTouchEvent()方法的实现,对于自定义ViewGroup的事件处理部分有借鉴意义。
这篇文章分析传统的基于Touch事件传递流程的下拉刷新逻辑。(还有一个逻辑分支是NestedScroll,先留个坑。)
通过PackageManager获取某个包下所有的Activity的信息。
1 | PackageManager pm = getPackageManager(); |
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像素。