android自定义View

    科技2024-10-08  17

    自定义view有四个构造函数

    主要参数AttributeSet 获取在xml中定义的参数

    继承view重写

    onMeasure onLayout onDraw

    view绘制流程

    onMeasure 测量宽高->onLayout 根据测量完的数据进行定位->onDraw 给定位好的布局绘制到页面上

    View #onMeasure()源码理解

    ViewGroup中并没有measure()也没有onMeasure() 因为ViewGroup除了测量自身的宽高,还需要测量各个子View的宽高,不同的布局测量方式不同 (例如 LinearLayout跟RelativeLayout等布局),所以直接交由继承者根据自己的需要去复写。但是里面因为子View的测量是相对固定的,所以里面已经提供了基本的measureChildren()以及measureChild()来帮助我们对子View进行测量。

    View #onLayout()源码理解

    View.java的onLayout方法是空实现:因为子View的位置,是由其父控件的onLayout方法来确定的。onLayout(int l, int t, int r, int b)中的参数l、t、r、b都是相对于其父 控件的位置。自身的mLeft, mTop, mRight, mBottom都是相对于父控件的位置。

    android坐标系

    内部View坐标系跟点击坐标

    draw绘画流程

    1 .绘制背景 2.如果必要的话,保存当前画布(canvas) 3.绘制view的内容 4.绘制子view的内容 5.如果必要的话,绘画边缘重新保存图层 6.画装饰(如滚动条)

    onInterceptTouchEvent

    viewGroup的onInterceptTouchEvent决定是否拦截控件,返回true,拦截当前事件

    Processed: 0.010, SQL: 8