皮皮网

【便民搬家网源码】【外卖人小程序源码全套】【捉妖红指标公式源码】ceo源码

时间:2025-01-29 14:00:46 来源:棋牌程序源码下载

1.自定义View(1)

ceo源码

自定义View(1)

        经历过前面三篇啰啰嗦嗦的基础篇之后,终于到了进阶篇,正式进入解析自定义View的阶段。

        至于本章节为什么要叫进阶篇(虽然讲的是基础的内容),因为从本篇开始,将会逐渐揭开自定义View的神秘面纱,每一篇都将比上一篇内容更加深入,利用所学的知识能够制作更加炫酷自定义View,就像在台阶上一样,每一篇都更上一层, 帮助大家一步步走向人生巅峰,出任CEO,赢取白富美。 误,是帮助大家更加了解那些炫酷的自定义View是如何制作的,达到举一反三的效果。

        作为一个<b>有(hui)追(zhuang)求(B)</b>的程序员,肯定想做一些让人眼前一亮的程序效果,但是系统提供的那些一般很难满足,为了<b>梦(zhuang)想(B)</b>就必须要学习一些自定义View。下面我们就了解一些自定义View相关的东西。

        自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件,大多继承自ViewGroup或各种Layout,包含有子View。

        例如:一个应用内的底部导航条中的条目,一般都是上面为图标,下面是文字,那么这两个就可以用自定义ViewGroup组合成为一个Veiw,提供两个属性分别用来设置文字和图片即可,这样使用起来会方便很多。

        在没有现成的View,需要自己实现的时候,就使用自定义View,一般继承自View,SurfaceView或其他的View,不包含子View。

        例如:定义一个支持自动加载网络图片的ImageView,或制作一种特殊的动画效果。

        <b>一般来说,自定义View在大多数情况下都有替代方案,利用图片或者组合动画来实现,但是使用后者可能会面临内存耗费过大,制作麻烦更诸多问题。</b>

        View的构造函数有四种重载分别如下

        可以看出,关于View构造函数的参数有多有少,先排除几个不常用的,留下常用的再研究。

        <b>有四个参数的构造函数在API的时候才添加上,我一般不使用,暂不考虑。</b>

        有三个参数的构造函数中第三个参数是默认的Style,这里的默认的Style是指它在当前Application或Activity所用的The便民搬家网源码me中的默认Style,且只有在明确调用的时候才会生效,以系统中的ImageButton为例说明:

        <b>注意:即使你在View中使用了Style这个属性也不会调用三个参数的构造函数,所调用的依旧是两个参数的构造函数。</b>

        <b>由于三个参数的构造函数第三个参数一般不用,暂不考虑,第三个参数的具体用法会在以后用到的时候详细介绍。</b>

        排除了两个之后,只剩下一个参数和两个参数的构造函数,他们的详情如下:

        以下方法调用的是<b>一个参数</b>的构造函数:

        以下方法调用的是<b>两个参数</b>的构造函数:

        关于构造函数先讲这么多,关于如何自定义属性和使用attrs中的内容,在后面会详细讲解,目前只需要知道这两个构造函数在何时调用即可。

        ========

        测量View大小使用的是onMeasure函数,我们可以从这两个参数取出宽高的相关数据:

        从上面可以看出 onMeasure 函数中有 widthMeasureSpec 和 heightMeasureSpec 这两个 int 类型的参数, 毫无疑问他们是和宽高相关的, <b>但它们其实不是宽和高, 而是由宽、高和各自方向上对应的模式来合成的一个值:</b>

        在int类型的位二进制位中,-这两位表示模式,~0这三十位表示宽和高的实际值。

        以数值(二进制为: )为例(其中模式和实际数值是连在一起的,为了展示我将他们分开了):

        实际上关于上面的东西了解即可,在实际运用之中只需要记住有三种模式,用 MeasureSpec 的 getSize是获取数值, getMode是获取模式即可。

        如果对View的宽高进行修改了,<b>不要调用super.onMeasure(widthMeasureSpec,heightMeasureSpec);</b>

        要调用<b>setMeasuredDimension(widthsize,heightsize);</b> 这个函数。

        ======

        这个函数在视图大小发生改变时调用:

        onSizeChanged如下:

        可以看出,它又四个参数,分别为 宽度,高度,上一次宽度,上一次高度。

        这个函数比较简单,我们只需关注 宽度(w), 高度(h) 即可,这两个参数就是View最终的大小。

        =========

        <b>确定布局的函数是onLayout,它用于确定子View的位置,在自定义ViewGroup中会用到,他调用的是子View的layout函数。</b>

        不过关于View的layout函数我们一般无需关注,因为在一般情况下我们只需关注View自身的坐标系即可,除非View状态与在父VIew所处位置相关。

        在自定义ViewGroup中,onLayout一般是循环取出子View,然后经过计算得出各个子View位置的坐标值,然后用以下函数设置子View位置。

        四个参数分别为:

        具体可以参考 坐标系 这篇文章:

        PS:关于onLayout这个函数在讲解自定义ViewGroup的时候会详细讲解。

        ========

        onDraw是实际绘制的部分,也就是我们真正关心的部分,使用的是Canvas绘图。

        关于Canvas绘图另分一章吧,本来想写一些关于Canvas基本操作的的,可是篇幅太长了QAQ, 留个尾巴下一篇再写吧,毕竟Canvas绘图也是一个比较庞大的东西,也不是三言两语就能讲明白的,就到这里吧。

        ======

        自定义完View之后,一般会对外暴露一些接口,用于操作View的相关属性,控制View的状态等,或者需要监听View的变化,具体还是稍后再讲吧(继续挖坑)。

        PS :实际上ViewGroup是View的一个子类。

        View

        ViewGroup

        View.MeasureSpec

        onMeasure,MeasureSpec源码 流程 思路详解

        Android中自定义样式与View的构造函数中的第三个参数defStyle的意义

        android view构造函数研究

        Android View构造方法第三参数使用方法详解

        Android 自定义View onMeasure方法的实现

        Android API指南(二)自定义控件之 onMeasure

        Android中View的绘制过程 onMeasure方法简述

推荐资讯
java md5 源码

java md5 源码

江西南昌县重大交通事故已造成19人死亡20人受伤丨滚动

江西南昌县重大交通事故已造成19人死亡20人受伤丨滚动

陕西省咸阳市知识产权工作再创佳绩

陕西省咸阳市知识产权工作再创佳绩

2022年北京查办反不正当竞争案241件 罚没款2942.58万元

2022年北京查办反不正当竞争案241件 罚没款2942.58万元

yii2 源码分析

yii2 源码分析

二十大代表风采丨徐梦桃:为梦想坚持 拼出冬奥冠军

二十大代表风采丨徐梦桃:为梦想坚持 拼出冬奥冠军

copyright © 2016 powered by 皮皮网   sitemap