android自定义view的三大流程_浪漫又简单求婚方式

Android (1) 2024-09-06 18:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
android自定义view的三大流程_浪漫又简单求婚方式,希望能够帮助你!!!。

正文

最终效果:

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第1张

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

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

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第2张

其中:

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

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

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

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

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

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第3张

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

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

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第4张

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

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第5张

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

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第6张

继续执行:

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

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

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第7张

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

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第8张

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第9张

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第10张

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

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

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

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

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第11张

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第12张

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

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第13张

android自定义view的三大流程_浪漫又简单求婚方式_https://bianchenghao6.com/blog_Android_第14张

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

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

下一篇

已是最新文章

发表回复