Android-自定义View集合
2016-12-16 本文已影响1084人
JackFrost_fuzhu
学习安卓几个月了,也有点自己的体会,然而我发现自己真正喜欢的是数据方面的东西,当然android自定义view也很好玩,很体验一些技巧性的东西。也不想自己以前学习过程总结的东西就此淹没,于是我就决定把自己的一些在android研究过的东西全部都分享出来啦。这个是自定义View系列,如果觉得我写的还行的话,可以在一起讨论,我还是可以帮忙写下一些特别的点的自定义view的。
文章结构:1.罗列分享我学习过程中写的自定义view;2.针对个别特殊的自定义view讨论下重要的思路部分;3.给出一些自定义view学习资源汇总;4.我学习自定义view的库,喜欢的支持的可以给下star或fork啦。
一、罗列分享我学习过程中写的自定义view
如下图:根据图中的去按照我的文章分点,以及最后给的源码结合来看吧,里面有我学习过程中的很多解释,虽然有的有点啰嗦,但很完整体现了我的思路了。
这里写图片描述这里写图片描述
二、针对个别特殊的自定义view讨论下重要的思路部分
(1)上面两个仿美团上方栏的效果:
第一个方案的 是xml中用radiobutton强制写死了大概多少个滑动页面的引导小圆点,这种方案可见复用性不高。实现步骤是:1.编写页面,使用一viewpager和一radiogroup组合做出效果;2.重要的是自定义viewpager的适配器;3.在controller的activity中实现耦合,往viewpager加入gridview,将gridview传给viewpager的适配器,用radiogroup的基本逻辑实现引导的小圆点UI。
第二种方案是我反编译了一下美团,看了下他们的大致布局,以及耦合的代码,实现的仿造。大致过程还是跟第一个方案相同,不过在小圆点的实现,参考它们的多重复用性方案。就是用一个小圆点数组,在controller那里实现绑定每个gridview。
(2)自定义Textview的字体,我以前写过了。Android-自定义TextView(彩色字体与霓虹灯字体以及TextView的多项字体效果)
(3)手动控制圆和圆形进度条也写过啦。 Android-自定义view之圆(选择程度圆以及进度圆)
(4)圆形头像也是写过了。 Android-解析自定义view之圆形头像的各类方案
(5)卫星导航栏。是以前项目移植过来的一个东西。很有趣的一个东西。重点是:重写relativelayout和用viewgroup实现自己的卫星布局。过段时间会针对这个写下文章。
(6)流式布局。鸿洋大大讲得很好
(7)水波纹。嘻嘻,这个要求是往下兼容,我用自己思路实现了一个,虽然很多人做项目都是照搬v7包,然后直接往下兼容,可是这种自定义view的会给我们加深认识安卓的底层绘图机制,继承机制的理解呀。
核心是:使用监听事件,利用不断重绘,并且要不断地清理画布的数据,不然会oom的。那个波纹的效果其实就是不断地画圆形,还要计算点击的点,计算半径,然后传递事件给dispatchDraw,不断重绘。
(8)图片轮播,这个很多人在开发的时候也是照搬第三方的库的,然而并不好,就不多说了。我们来讨论下它的核心思路:(具体看源码有详细的思路解释)
1.自定义viewpager和自定义viewpager的适配器,其中轮播器实现的:轮播器最重要的几个特点就是:自动滚动、手动滑动、滚动方向、每个Item显示时间。2.在viewpager中实现的定时轮播,写个定时器去执行他;3.一个线程安全的播放方法,根据我们设置的向标记量去轮播(向左向右向上向下)。
(9)recyclerview,鸿洋大大的完美解释。鸿洋大大的recyclerview
有能力的朋友,最好也把鸿洋大大的recyclerview封装也看了,我在项目中用了,阅读大大的思路真的真的很棒!!鸿洋大大的recyclerview封装
(10)接下来就是圆形菜单的,我基于鸿洋大大的一些思路根据实际需求做了一个限制级的圆形菜单。以前也解析过啦。 Android-自定义view之圆形与“半圆形”菜单
三、给出一些自定义view学习资源汇总:
初步接触自定义看的东西:首先要清楚为什么要自定义view,什么是自定义view啦。给出博客你看:
总的我们要三步骤:一、自定义控件;二、自定义布局;三、深研自定义机制。
1.基础一。
2.然后基础二。
3.了解大概后,接着你就要系统一下看看自定义有多少东西。启航的系列很详细
4.开始实现自己的自定义控件啦:三种自定义方式:扩展,组合,重写
5.自定义布局从LinearLayout谈起
6.在这过程中见识各个android大佬的自定义:搜下博客之星,前几的基本都是android的啦。
7.深入自定义机制:(从个别方法到事件传递机制)
(1)getWidth和getMeasuredwidth方法:http://blog.csdn.net/u011494050/article/details/39134161
http://blog.sina.com.cn/s/blog_6e519585010152s5.html