推翻自己和过往,重学自定义View
http://blog.csdn.net/lfdfhl/article/details/51671038
深入探讨Android异步精髓Handler
站在源码的肩膀上全解Scroller工作机制
Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南
自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理
PS:如果觉得这个系列的每篇文章太长,那就直接看视频吧
你和我可能相似的感受
路上的司机都知道自定义View有三个重要的步骤:measure,layout,draw。
关于这三个玩意,我们听得太多太多了,平常工作也基本上是这么按部就班的。
可是有一天,我们或许会发现许多关于自定义View的开发技术我们仅仅是掌握了常见的用法,但是没有去深入学习过;许多问题一知半解,知其然而不知其所以然。比如:
- 为什么父View影响到了子View的MeasureSpec的生成?
- 为什么自定义一个View在布局时将其大小设为wrap_content但其实际却是match_parent的效果?
- 子View的specMode和specSize生成的依据是什么?
- 为什么子View对于ACTION_DOWN返回false,系统就不会将ACTION_MOVE和ACTION_UP派发给该子View?
- 为什么子view对于Touch事件处理返回true那么其上层的ViewGroup就无法处理Touch事件?
- View的滑动冲突是怎么产生的,又该怎么处理?
- 为什么有时requestDisallowInterceptTouchEvent()会失效?
这七个葫芦娃之前也一直困扰着我,我就去找资料看,从博客园到CSDN,从stackoverflow到EOE论坛,从百草园到三味书屋,搜了一大筐,沮丧的发现这些文章大同小异:只举个简单的例子,很少研究为什么;人云亦云,文章里的内容根本没有去验证和深究就发出来了;或者避重就轻展示简单的Demo直接把难点给绕过去了;文章零零散散不成体系……每次看完这些文章觉得还是晕头转向,稀里糊涂,原本就不多的学习动力和勇气也消失殆尽了。这可能就是《自定义View——从入门到放弃》的剧本吧:我们欲求不满,欲罢不能——想搞懂却又觉得难,想放弃又觉得舍不得。看了那么多文章依旧不能解答原来的疑惑;就像听过了许多大道理依旧不过好这一生。
每当这个时候我都在想:要是有一个介绍自定义View的系列教程该有多好呀!要是有一个图能把繁杂的源码流程梳理得清清楚楚的那该有多好呀!
可是,在反复的搜索之后我的愿望依旧落空了,没有人给我准备好我需要的东西。当我想安慰自己再等等的时候,我猛地想起风韵犹存的郭大婶说的那句话:每当你在感叹,如果有这样一个东西就好了的时候,请注意,其实这是你的机会。
是啊,你怎么总是在期待别人把东西洗得干干净净,摆得整整齐齐地放在你面前呢?!?
对啊,自己动手实现这个期待难道不是一个最好的学习过程么?!
嗯哼,想到这里我决定了要自己梳理自定义View,而且要把它们弄成一个系列的。
自定义View系列教程
既然要重新学习自定义View,那就不能再走老路了。所以,这次我都是从源码开始的,从源码里寻找那些解开困惑的良方。在看完源码之后,我怕脑子笨过几天又忘记了,于是我又着手画流程图。印象最深的是画ViewGroup的dispatchTouchEvent()流程图,端午节在家画了一天。我以前特别讨厌画流程图,觉得花拳绣腿没有实际的用处。通过这些段时间,我才认识到自己的无知!其实,画流程图是对代码的理解和逻辑的分析是非常有帮助的!只要你能画出对应的流程图来,那么说明你是正真的理解了!画完流程图之后,我就开心地睡觉了,一觉起来发现有的东西又变得模糊了,反而是梦里的美女清晰得很,连脖子后面有颗痣都还记得!无耻啊,无耻!好吧,我只好使出我的杀手锏了———写博客!每次学习完对应的内容,我就写一篇博客记录下来,而且在记录的过程中再次梳理知识点,同时进行详细得令人发指的记录,比如在源码分析的时候哪几行是干嘛的都一一作了笔记。
最后形成了一个系列的文章:
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理
前后一共花了一个半月的时间,战线稍微拉得有点长了。没办法,基本每天都要加班,有时候连周末都难于幸免。学习的时候只有安排在晚上回家之后了。这个过程有一点点痛苦,还好,还好,坚持过来了。
多谢你们
小伙伴
博客是发到CSDN上的,由于每篇文章都很长,所以我有点担心没有人看。后来发现我的顾虑有点多余了,不但有人看还有的人看得很仔细并且指出了文章中的笔误,非常感谢郭大婶
有几次看源码看得我有些郁闷,情绪也不好;我就硬着头皮继续看结果更悲剧了,犯了低级的错误。好在郭大婶出手相救,把我从悬崖边拉了回来。这也给我一个教训:不要死钻牛角尖难以自拔,状态不好的时候就换个思路,或者出去走走,或者听歌舒缓一下情绪,或者打开E盘学习一下中日文化交流Stay
开车多年的老司机了,我有次在看源码拐弯的时候卡住了。多谢他帮我拖车,拖完之后还给我讲Retrofit。
不打鸡血,不喝鸡汤;不念过往,不畏将来。
期望有一天不用写代码也吃得起馒头。
或许我是一个存在主义者。
PS:如果觉得这个系列的每篇文章太长,那就直接看视频吧
推翻自己和过往,重学自定义View相关推荐
- 新手学自定义View系列(一)Demo
简述: 为什么要另写这篇Demo博客? 上篇博客最后给出了一个折线图的例子,记得当时是说下篇博客给出其源码,但是后来我又想了下,咱们既然是新手系列的自定义View,内容就需要做到详细,清楚和明白.如果 ...
- Android开源绘画板(普通绘画模式和可缩放模式)——秒学自定义View和触摸事件原理...
ScaleSketchPadDemo 博客园原文链接 www.cnblogs.com/jincheng-ya- 此项目包含两个模块 app1 为普通绘画板 app2 为可所发的绘画板 方便各位Andr ...
- Android 自定义view完全解析--带你通透了解自定义view
参考转自郭霖博客带你一步步深入了解View系列 Android LayoutInflater原理分析 相信接触Android久一点的朋友对于LayoutInflater一定不会陌生,都会知道它主要是用 ...
- Android开发自定义View实现数字与图片无缝切换的2048
本博客地址:http://blog.csdn.net/talentclass_ctt/article/details/51952378 最近在学自定义View,无意中看到鸿洋大神以前写过的2048(附 ...
- 60.自定义View练习(五)高仿小米时钟 - 使用Camera和Matrix实现3D效果
*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 本文出自:猴菇先生的博客 http://blog.csdn.net/qq_31715429/article/details/546 ...
- wing带你玩转自定义view系列(3)模仿微信下拉眼睛
发现了爱神的自定义view系列,我只想说一个字:凸(艹皿艹 ) !!相见恨晚啊,早看到就不会走这么多弯路了 另外相比之下我这完全是小儿科..所以不说了,这篇是本系列完结篇....我要从零开始跟随爱哥脚 ...
- 新手自定义view练习实例之(一) 泡泡弹窗
转载请注明出处:http://blog.csdn.net/wingichoy/article/details/50455412 本系列是为新手准备的自定义view练习项目(大牛请无视),相信在学习过程 ...
- 自定义View,有这一篇就够了
我的简书同步发布:自定义View,有这一篇就够了 为了扫除学习中的盲点,尽可能多的覆盖Android知识的边边角角,决定对自定义View做一个稍微全面一点的使用方法总结,在内容上面并没有什么独特的地方 ...
- 很有用的自定义View详解教程
注册 登录 转载地址:http://www.jianshu.com/p/c84693096e41 自定义View,有这一篇就够了 字数4899 阅读2302 评论20 喜欢105 我的CS ...
最新文章
- window powershell 获取前后日期,格式化日期
- 图像滤镜艺术---图像滤镜晕影调节算法研究
- 树莓派上搭建svn服务器
- linux入门教程(七) linux系统用户以及用户组管理
- Linux中sftp加权限,Linux 搭建Sftp服务并进行权限设置
- python字符识别_crnn(基于pytorch、python3) 实现不定长中文字符识别
- dac0832产生梯形波程序C语言,在8086系统中用DAC0832输出一个三角波,一个梯形波,和一个正弦波。...
- 创业公司引导页html5模板
- Linux高级管理之ACL(访问控制列表)实战应用
- ngrok服务的编译与环境搭建
- 苹果11微信表格服务器地址怎么填,苹果实用技巧:iPhone11手机微信打字怎么换行...
- C#小白上手篇---TextBox读取和修改本地TXT文本内容。
- java.sql.SQLException: Invalid utf8 character string: 'ACED00'
- 今日头条视频Url嗅探
- 原来做图标这么简单!
- openwrt RK3568_EVB移植
- mysql 架构 ~ binlog_server
- Vmware WorkStation(中文名“威睿工作站”) 网卡图解
- TSC MH240 打印机驱动
- 古风教学道德课主题PPT模板
热门文章
- Android Listview 性能优化
- POJ 2323 贪心
- 53.Maximum Subarray
- IOS 上传ipa文件失败
- Bootstrap系列 -- 41. 带表单的导航条
- matlab数值过小为0,MATLAB数值计算——0
- python处理excel的方法有哪些_python简单处理excel方法
- fastreport 直接调网络打印机_为什么UV打印机不能打印凹凸不平的材料?
- linux驱动调试--oops信息
- -js中json数组 以表格形式_为什么js类数组加上splice方法就是数组形式,不加就是对象形式?...