今日科技快讯

根据央视网消息,年度十大流行语、十大新词语和十大网络用语同时揭晓。

长征精神,两学一做,杭州G20峰会,南海,里约奥运会,脱欧,美国大选,亲信干政,天宫二号,阿尔法围棋 获评“2016年度十大流行语”。

两学一做,冻产,表情包,洪荒之力,阿尔法围棋,网络大电影,摩拜单车,山寨社团,吃瓜群众,闺蜜门 获评“2016年度十大新词语”。

洪荒之力,友谊的小船, 定个小目标,吃瓜群众,葛优躺,辣眼睛,全是套路,蓝瘦香菇,老司机,厉害了我的哥 当选“2016年度十大网络用语”。

作者简介

本篇来自 solary 有关自定义View的投稿,题材也是满6的,告诉我们程序员也是可以靠自己的技能来追妹子滴。。。感兴趣的朋友快来看看吧。

solary 的博客地址:

http://blog.csdn.net/asd1031

正文

最终效果:

有木有发现还是很小清新的感觉 

看整体效果这是一个 scrollView,滑动时每个 子view 都有一个或多个动画效果,但是如果我们直接给每个 子view 加上动画去实现这个需求就太low了,而且也不利于扩展,所以这里将会设计一套框架,使别人能很方便的使用我们定义的控件。

首先看看我们是怎么使用自己设计的这个控件的:

其中:

discrollve:discrollve_alpha="true"discrollve:discrollve_translation="fromLeft|fromBottom"

这里我们给系统控件加上自定义属性,这样当别人用我们的控件,简直不要太爽。

不过大家有没有发现这是系统控件哎,你就这么随随便便的给它加个属性,它认识么,不报错你就谢天谢地了,还让它工作,想的美。

带着这个疑惑,我们先来看看系统的 ViewGroup 类是怎么做的。

一般我们在代码中给布局动态添加子控件的时候都会用到 addView 这个方法。这里我们就跟踪这个方法,最后发现他们会调用到 ViewGroup 的 addview 方法。

有没有发现这里这里最后的 params 是怎么来的?不就是子控件的 params 么。而addView(child, index, params); 最后会调用 addViewInner

下面我们看下 addViewInner 是怎么做的

代码还是比较多的,只关注对我们有用的片段,首先它会调用 checkLayoutParams(params)

如果不等于空就会调用就调用 generateLayoutParams

继续执行:

if (preventRequestLayout) {child.mLayoutParams = params;
} else {child.setLayoutParams(params);
}

看到上面的 checkLayoutParamsgenerateLayoutParams 方法都比较简单而且是protected的,所以应该是给子类实现的,我们看一个 viewgroup 的子类 LinearLayout是怎么做的:

看到这里就在想我们是不是也可以这么做呢,那当然是可以的。系统都可以了还有什么问题,接下来我们的大波代码来袭了:



上面这大段代码主要就做了我们上面分析的系统空间。

首先继承 LinearLayout,重写了 addView,generateLayoutParams,checkLayoutParams 并自定义了一个 MyLayoutParams 继承自 LinearLayout.LayoutParams

addview 的时候我们首先对 child 进行下处理,判断 子view 中是否有我们定义属性,没有的话,就用它自己,有的话,我们在外层包一个 FrameLayout,让他执行动画,他的 子view 也将跟着执行。

好了,框架的设计部分完成了,下面就是动画的实现了,首先看我们的 scrollView 是怎么做的:


主要就是在滑动的时候,把滑动的百分比传给接口 ,具体由接口的实现类来执行,而实现接口的类就是我们上面的那个 FrameLayout

可以看出每个类都不是很大,当用户要用的时候只要在xml中引用我们的控件,就可以实现这个效果,而且他要别的效果的话同样只要在xml中配置就好。

源码地址:

https://github.com/solary2014/ScrollViewGroup.git

更多

每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。

如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。

欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:

Android自定义ViewGroup之浪漫求婚相关推荐

  1. android自定义viewgroup之我也玩瀑布流

    先看效果图吧, 继上一篇<android自定义viewgroup实现等分格子布局>中实现的布局效果,这里稍微有些区别,每个格子的高度不规则,就是传说的瀑布流布局,一般实现这种效果,要么用第 ...

  2. android 自定义flowlayout,Android 自定义ViewGroup之实现FlowLayout-标签流容器

    本篇文章讲的是Android 自定义ViewGroup之实现标签流式布局-FlowLayout,开发中我们会经常需要实现类似于热门标签等自动换行的流式布局的功能,网上也有很多这样的FlowLayout ...

  3. Android自定义文件路径箭头,Android自定义ViewGroup实现带箭头的圆角矩形菜单

    本文和大家一起做一个带箭头的圆角矩形菜单,大概长下面这个样子: 要求顶上的箭头要对准菜单锚点,菜单项按压反色,菜单背景色和按压色可配置. 最简单的做法就是让UX给个三角形的图片往上一贴,但是转念一想这 ...

  4. Android自定义ViewGroup实现朋友圈九宫格控件

    在我们的实际应用中,经常需要用到自定义控件,比如自定义圆形头像,自定义计步器等等,这篇文章主要给大家介绍了关于Android自定义ViewGroup实现朋友圈九宫格控件的相关资料,需要的朋友可以参考下 ...

  5. Android 自定义ViewGroup之实现FlowLayout-标签流容器

    本篇文章讲的是Android 自定义ViewGroup之实现标签流式布局-FlowLayout,开发中我们会经常需要实现类似于热门标签等自动换行的流式布局的功能,网上也有很多这样的FlowLayout ...

  6. Android自定义ViewGroup基本步骤

    1.自定义属性,获取自定义属性,可参考 ​ Android自定义View基本步骤 ​ 2.onMeasure() 方法,for循环测量子View,根据子View的宽高来计算自己的宽 高 3.onDra ...

  7. android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]

    http://blog.csdn.net/jj120522/article/details/8095852 示意图就不展示了,和上一节的一样,滑动菜单SlidingMenu效果如何大家都比较熟悉,在这 ...

  8. 教你搞定Android自定义ViewGroup

    ViewGroup 我们知道ViewGroup就是View的容器类,我们经常用的LinearLayout,RelativeLayout等都是ViewGroup的子类,因为ViewGroup有很多子Vi ...

  9. Android自定义ViewGroup的OnMeasure和onLayout详解

    前一篇文章主要讲了自定义View为什么要重载onMeasure()方法http://blog.csdn.net/tuke_tuke/article/details/73302595 那么,自定义Vie ...

最新文章

  1. MyBatis常见面试题汇总
  2. exe4j 报错 找不到class
  3. Docker Swarm删除节点
  4. Javascript之 对象和原型
  5. 1127: 第三章:再见,林静!
  6. 上海有哪些计算机技术专科学校,上海计算机专业大学排名,第一名居然是这所大学!...
  7. PHP+Mysql查询上一篇和下一篇文章实例
  8. jquery可见性过滤选择器:hidden、:visible
  9. Mvc中Session导致action不异步的问题
  10. Mac下生成多个SSH KEY并管理
  11. 超全汇总,常见的芯片封装大全-道合顺大数据infinigo
  12. 如何在计算机管理路由器,怎么查看路由器的管理IP地址?
  13. 分享华为鲲鹏(ARM)镜像站地址
  14. wannacry作者捉到了吗_WannaCry爆发的根源原来是它?
  15. RK平台 USB转RS485
  16. 2018 Github优秀开源项目整理
  17. 达人评测 i7 12700H和R7 6800H选哪个好
  18. linux ipv6添加路由器,使用Linux搭建IPV6路由器(CentOS版)
  19. 深入理解ElasticSearch(原书第2版)
  20. Unity2D横版游戏地形生成

热门文章

  1. 用html5写一个母亲节贺卡
  2. MTTR/MTTF/MTBF
  3. mvc iis设置默认首页无效
  4. 静态函数哈哈哈啊哈哈哈
  5. CSS样式居中代码小结
  6. latex字体大小调整
  7. 【原创意】一个市值估算超亿的创意——愤怒的小猪(谢绝抄袭和冒名顶替)...
  8. 计算机病毒与恶意代码(第四版)期末复习考点总结2021
  9. 粤友钱配资讲解主力洗盘会遵循哪些方法?
  10. Win10创建wifi热点时出现无法启动承载网络的问题,导致手机连不上电脑所开的热点