自定义控件的初次建立的时候方法调用顺序

package com.football.app.view;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

/**
 * Created by Administrator on 2015/9/17.
 */
public class TestView extends Button {
    public TestView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        Log.d("测试代码", "TestView---TestView");
    }

    public TestView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        Log.d("测试代码", "TestView---TestView");
    }

    public TestView(Context context, AttributeSet attrs) {
        super(context, attrs);
        Log.d("测试代码", "TestView---TestView");
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        Log.d("测试代码", "TestView---onMeasure");
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        Log.d("测试代码", "TestView---onLayout");
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Log.d("测试代码", "TestView---onDraw");
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        Log.d("测试代码", "TestView---onSizeChanged");
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            Log.d("测试代码", "TestView---ACTION_UP----invalidate");
            invalidate();
        }
        return super.onTouchEvent(event);

    }
}

09-17 15:27:22.930  17644-17644/com.football.app D/测试代码﹕ TestView---TestView
09-17 15:27:22.992  17644-17644/com.football.app D/测试代码﹕ TestView---onMeasure
09-17 15:27:22.993  17644-17644/com.football.app D/测试代码﹕ TestView---onMeasure
09-17 15:27:23.031  17644-17644/com.football.app D/测试代码﹕ TestView---onMeasure
09-17 15:27:23.032  17644-17644/com.football.app D/测试代码﹕ TestView---onMeasure
09-17 15:27:23.037  17644-17644/com.football.app D/测试代码﹕ TestView---onSizeChanged
09-17 15:27:23.037  17644-17644/com.football.app D/测试代码﹕ TestView---onLayout
09-17 15:27:23.062  17644-17644/com.football.app D/测试代码﹕ TestView---onMeasure
09-17 15:27:23.063  17644-17644/com.football.app D/测试代码﹕ TestView---onLayout
09-17 15:27:23.064  17644-17644/com.football.app D/测试代码﹕ TestView---onDraw
09-17 15:27:23.074  17644-17644/com.football.app D/测试代码﹕ TestView---onDraw
09-17 15:27:23.100  17644-17644/com.football.app D/测试代码﹕ TestView---onMeasure
09-17 15:27:23.102  17644-17644/com.football.app D/测试代码﹕ TestView---onMeasure
09-17 15:27:23.108  17644-17644/com.football.app D/测试代码﹕ TestView---onLayout
09-17 15:27:23.111  17644-17644/com.football.app D/测试代码﹕ TestView---onDraw

根据上面的代码,调用顺序应该是   构造函数------->onMeasure------->onSizeChanged------->onLayout------->onDraw

后面有可能 onMeasure------->onLayout------->onDraw

时间: 2024-11-10 11:31:17

自定义控件的初次建立的时候方法调用顺序的相关文章

AsyncTask内的各个方法调用顺序

|- AsyncTask内的各个方法调用顺序:|- 首先,用户调用execute方法,启动AsyncTask .然后在execute方法中:|- 首先调用onPreExecute方法,执行初始化操作.|- 然后从线程池中取出若干个空闲的线程,并使用该线程调用doInBackground方法,执行耗时的操作,如文件下载等.|- 提示:调用execute方法时设置的参数会被直接传递给doInBackground方法.|- 当doInBackground方法执行完毕后,onPostExecute方法将

jquery更改ready方法调用顺序,在ready之后执行Js代码

*/--> jquery更改ready方法调用顺序,在ready之后执行Js代码 Table of Contents 问题描述 在所有的ready方法之后执行上面的方法 重写$.fn.ready方法 查看$.fn.ready的源码定义 修改自己的$.fn.ready 闭包,增加安全性 问题描述 我想要控制Input,回车不提交表单,思路如下: $(function(){ $("form input").on("keypress",function(event)

转:UIViewController中各方法调用顺序及功能详解

UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear, viewWillLayoutSubviews,viewDidLayoutSubviews,viewWillDisappear, viewDidDisappear方法,按照调用顺序说明如下: 调试日志: 1 2 3 4 5 6 7 8 9 2013-07-14 12:15:49.048 VCTes

UIViewController中各方法调用顺序及功能详解

UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear, viewWillLayoutSubviews,viewDidLayoutSubviews,viewWillDisappear, viewDidDisappear方法,按照调用顺序说明如下: 调试日志: 1 2 3 4 5 6 7 8 9 2013-07-14 12:15:49.048 VCTes

(转)UIViewController中各方法调用顺序及功能详解

目录(?)[-] 1 initWithNibNamebundle 2 loadView 3 viewDidLoad 4 viewWillAppear 5 viewDidAppear 6 viewWillLayoutSubviews 7 viewDidLayoutSubviews 8 viewWillDisappear 9 viewDidDisappear 10 viewWillUnload 11 viewDidUnload UIViewController中loadView, viewDidLo

UIViewController的生命周期及方法调用顺序

ViewController解析 UIViewController是iOS顶层视图的载体及控制器,用户与程序界面的交互都是由UIViewController来控制的,UIViewController管理UIView的生命周期及资源的加载与释放. UIView与UIWindow共同展示了应用程序的用户界面.可以将UIView理解成画布,UIWindow理解成画框.这两个类的继承关系是这样的: NSObject — UIResponder — UIView — UIWindow  (UIWindow

python多重继承的属性和方法调用顺序问题和对迭代器的初步理解

推荐阅读:https://www.cnblogs.com/bigb/p/11650707.html 计算机学习的一个好办法就是自己将代码跑一遍,了解代码的运作顺序和原理(主要弄懂 函数作用,传入参数,返回值) 见代码: class A(object): def __init__(self): print('A') super(A, self).__init__() class B(object): def __init__(self): print('B') super(B, self).__i

viewPager的OnPageChangeListener监听器的方法调用顺序

mviewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {     @Override     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {           Log.d("测试代码", "onPageScrolled滑动中" + positi

VC方法调用顺序

VC1,push VC2 ? vc2 pop 到vc1 ? 右滑一半,然后取消 vc1 present到vc2 ? vc2 dismiss到vc1 ? push和present是不同的.表现在两个vc的didappear和diddisapper的顺序上 6. 如何禁止右滑pop界面 self.navigationController.interactivePopGestureRecognizer.enabled = NO;