美文网首页程序员
自定义View学习之路

自定义View学习之路

作者: 菜鸟东 | 来源:发表于2017-07-21 09:21 被阅读0次

    学习自GcsSloop链接地址

    同时参考任玉刚的Android开发艺术探索

    记录下自己不熟悉的地方。

    一、.MotionEvent中 get 和 getRaw 的区别

    event.getX()和event.getY()       //触摸点相对于其所在组件坐标系的坐标,也就是相对于自身来说

    event.getRawX()和event.getRawY;    //触摸点相对于屏幕默认坐标系的坐标,相对于整个屏幕来说

    以前不知道区分这两个概念,顺便把作者的图拿来了。相当直观。

    二、角度和弧度

    角度:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆周长的360分之一时,两条射线的夹角的大小为1度.(即将整个圆分为360份,夹角所对应的弧长所占的比例即为该夹角的角度)

    弧度:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆的半径时,两条射线的夹角大小为1弧度.(圆弧长对半径的比值即为弧度,园转一圈是2π弧度.)

    等价关系:360(角度) = 2π(弧度) ==> 180(角度) = π(弧度)

    rad 是弧度, deg 是角度

    rad = deg x π / 180  

    弧度=角度*π/180

    deg = rad x 180 / π

    角度=弧度x 180 / π

    公式就是看着比较头疼啊。。。当年数学还是不错的。结果现在发现都快忘光了==、这次正好复习下

    在默认的屏幕坐标系中左上为原点,角度增大方向为顺时针。

    三、自定义View分类与流程

                                                                            自定义View绘制流程函数调用链(简化版)


    3.1自定义View的分类

        1.自定义ViewGroup

         1.1继承ViewGroup派生特殊的Layout

          这种方法主要用于实现自定义的布局,即除了系统布局以外的布局,采用这种方式需要处理ViewGroup的测量、布局,还得处理子元素的测量和布局过程,比较麻烦。 

          1.2继承特定的ViewGroup

           当需要某种效果看起来像几种View组合在一起的时候,可以采用这种方式实现,采用这种方式不要自己处理ViewGroup的测量和布局,一般来说上个方式能实现的这个也可以实现,不过上种方式更接近View的底层。

         2.自定义View

         2.1继承View重写onDraw方法

            主要是重写onDraw方式,需要自己支持wrap_content和padding的处理。

         2.2继承特定的View

            直接继承已有的View,进行功能的拓展

    3.2测量View大小(onMeasure)

    在onMeasure方法中,参数为intwidthMeasureSpec, intheightMeasureSpec,但是这不是宽和高,而是由宽、高和各自方向上对应的测量模式来合成的一个值,(这句还是不太理解)

    可以通过MeasureSpec.getSize(widthMeasureSpec);得到具体的宽高

    注意:

    如果对View的宽高进行修改了,不要调用super.onMeasure(widthMeasureSpec,heightMeasureSpec);要调用setMeasuredDimension(widthsize,heightsize);这个函数。

    3.3.确定View大小(onSizeChanged)

    onSizeChanged中的宽高就是最终的宽高

    其他的都是实践为主了。。暂不记录了

    相关文章

      网友评论

        本文标题:自定义View学习之路

        本文链接:https://www.haomeiwen.com/subject/wvnyvttx.html