谷哥的小弟
历任研发工程师,技术组长,项目经理;曾于2016年、2020年两度荣获优快云年度十大博客之星。
十载寒冰,难凉热血;多年过去,历经变迁,物是人非。
然而,对于技术的探索和追求从未停歇。
坚持原创,热衷分享,初心未改,继往开来!
展开
-
推翻自己和过往,重学自定义View
关于自定义View以前看了很多资料看,从博客园到优快云,从stackoverflow到EOE论坛,从百草园到三味书屋,搜了一大筐,沮丧的发现这些文章大同小异:只举个简单的例子,很少研究为什么;人云亦云,文章里的内容根本没有去验证和深究就发出来了;或者避重就轻展示简单的Demo直接把难点给绕过去了;文章零零散散不成体系……每次看完这些文章觉得还是晕头转向,稀里糊涂,原本就不多的学习动力和勇气也消失殆尽了。原创 2016-06-14 13:49:50 · 45813 阅读 · 70 评论 -
自定义View系列教程01--常用工具介绍
在自定义View的时候,常常会用到一些Android系统提供的工具。这些工具封装了我们经常会用到的方法,比如拖拽View,计算滑动速度,View的滚动,手势处理等等。如果我们自己去实现这些方法会比较繁琐,而且容易出一些bug。所以,作为自定义View系列教程的开端,先介绍一下这些常用的工具,以便在后续的学习和工作中使用。原创 2016-05-05 16:50:38 · 48182 阅读 · 64 评论 -
自定义View系列教程02--onMeasure源码详尽分析
大家知道,自定义View有三个重要的步骤:measure,layout,draw。而measure处于该链条的首端,占据着极其重要的地位;然而对于measure的理解却不是那么容易,许多问题都是一知半解,比如:为什么父View影响到了子View的MeasureSpec的生成?为什么我们自定义一个View在布局时将其宽或者高指定为wrap_content但是其实际是match_parent的效果?子V原创 2016-05-12 15:09:59 · 40690 阅读 · 92 评论 -
自定义View系列教程03--onLayout源码详尽分析
在经过measure阶段以后,系统确定了View的大小,接下来就进入到layout的过程。在该过程中会确定视图的显示位置(即子View在其父控件中的位置)。嗯哼,我们直接扒开源码从View的layout( )开始入手。原创 2016-05-17 07:24:46 · 25249 阅读 · 35 评论 -
自定义View系列教程04--Draw源码分析及其实践
通过之前的详细分析,我们知道:在measure中测量了View的大小,在layout阶段确定了View的位置。 完成这两步之后就进入到了我们相对熟悉的draw阶段,在该阶段真正地开始对视图进行绘制。按照之前的惯例,我们来瞅瞅View中draw( )的源码 public void draw(Canvas canvas) { final int privateFlags = mPriv原创 2016-05-26 07:53:47 · 27950 阅读 · 34 评论 -
自定义View系列教程05--自定义View示例分析
之前结合源码分析完了自定义View的三个阶段:measure,layout,draw。 那么,自定义有哪几种常见的方式呢?直接继承自View 在使用该方式实现自定义View时通常的核心操作都在onDraw( )当中进行。但是,请注意,在分析measure部分源码的时候,我们提到如果直接继承自View在onMeasure( )中要处理view大小为wrap_content的情况,否则这种情原创 2016-05-31 22:06:40 · 23032 阅读 · 60 评论 -
自定义View系列教程06--详解View的Touch事件处理
在之前的几篇文章中结合Andorid源码还有示例分析完了自定义View的三个阶段:measure,layout,draw。 在自定义View的过程中我们还经常需要处理View的Touch事件,这就涉及到了大伙常说的Touch事件的分发。其实,这一部分还是有些复杂的,而且有的地方不是很好理解,尤其是对于刚上路的新司机来说经常理不清楚,欲求不满,欲罢不能——想搞懂却又觉得难,想放弃又觉得舍不得。好吧,我也经历过这些痛原创 2016-06-06 07:23:37 · 19155 阅读 · 24 评论 -
自定义View系列教程07--详解ViewGroup分发Touch事件
在上一篇中已经分析完了View对于Touch事件的处理,在此基础上分析和理解ViewGroup对于Touch事件的分发就会相对容易些。 当一个Touch事件发生后,事件首先由系统传递给当前Activity并且由其dispatchTouchEvent()派发该Touch事件,源码如下:public boolean dispatchTouchEvent(MotionEvent ev) {原创 2016-06-13 10:05:32 · 18464 阅读 · 46 评论 -
自定义View系列教程08--滑动冲突的产生及其处理
在之前的几篇文章中,我们已经分析了View对于Touch的处理以及ViewGroup对于Touch事件的分发。但在开发中时常遇到一个棘手的问题:Touch事件的滑动冲突。比如ListView嵌套ScrollView,ViewPager嵌套ScrollView,ListView嵌套ScrollView时常常发生。这些滑动冲突的产生,一般而言都具有以下特点:子View和父View都有滑动的需原创 2016-06-13 17:17:58 · 13747 阅读 · 40 评论