Android自定义View绘制的方法及过程(二)

作者:罔少年 时间:2023-05-02 14:42:17 

上一篇《Android 自定义View(一) Paint、Rect、Canvas介绍》讲了最基础的如何自定义一个View,以及View用到的一些工具类。下面讲下View绘制的方法及过程


public class MyView extends View {
private String TAG = "--------MyView";
private int width, height;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
Log.i(TAG,"MyView()");
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
width = w;
height = h;
Log.i(TAG,"onSizeChanged()");
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.i(TAG,"onDraw()");

Rect rect = new Rect(0, 0, width, height);
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawRect(rect, paint);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.i(TAG,"onMeasure()");
}

@Override
protected void onFinishInflate() {
super.onFinishInflate();
Log.i(TAG,"onFinishInflate()");
}
}

03-15 01:28:53.111 30961-30961/com.myView I/--------MyView: MyView()
03-15 01:28:53.111 30961-30961/com.myView I/--------MyView: onFinishInflate()
03-15 01:28:53.210 30961-30961/com.myView I/--------MyView: onMeasure()
03-15 01:28:53.210 30961-30961/com.myView I/--------MyView: onMeasure()
03-15 01:28:53.520 30961-30961/com.myView I/--------MyView: onMeasure()
03-15 01:28:53.520 30961-30961/com.myView I/--------MyView: onMeasure()
03-15 01:28:53.520 30961-30961/com.myView I/--------MyView: onSizeChanged()
03-15 01:28:53.543 30961-30961/com.myView I/--------MyView: onDraw()

1、MyView() 构造方法,这个不做解释,铁定第一个被调用。

作用:传入Context

2、onFinishInflate() 当View中所有的子控件均被映射成xml后触发

3、onMeasure() 在View放置到父容器时调用

作用:测量View的大小,也可以通过下面方式,修改View的大小


@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(100,100);
}

也可以通过以下方式获取控件的宽和高


@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec));
}

4、onSizeChanged() 在控件大小发生改变时调用。所以这里初始化会被调用一次

作用:获取控件的宽和高度

5、onDraw() 最后就是绘制图形了

标签:Android,View,绘制
0
投稿

猜你喜欢

  • SpringMVC中的handlerMappings对象用法

    2023-01-09 21:38:36
  • Android 虚拟按键与沉浸式的适配方法

    2021-11-27 22:03:02
  • Java泛型T,E,K,V,N,?与Object区别和含义

    2022-02-23 07:25:30
  • Android中子线程和UI线程通信详解

    2023-03-21 00:05:10
  • Java8新特性之lambda(动力节点Java学院整理)

    2022-01-16 21:35:54
  • IDEA无法使用Git Pull的问题

    2023-05-04 10:55:39
  • Java日常练习题,每天进步一点点(42)

    2022-10-28 01:42:54
  • Java去掉小数点后面无效0的方案与建议

    2023-11-29 11:46:57
  • Spring Boot Admin实践详解

    2023-08-25 06:57:53
  • Java Spring开发环境搭建及简单入门示例教程

    2021-08-17 07:36:28
  • Android中TextureView与SurfaceView用法区别总结

    2023-07-20 00:29:16
  • 基于Java的MathML转图片的方法(示例代码)

    2023-11-25 14:29:39
  • WinForm实现窗体最大化并遮盖任务栏的方法

    2022-09-19 20:00:19
  • java线程池使用后到底要关闭吗

    2022-03-17 04:28:43
  • Java 随机生成任意组电话号码过程解析

    2022-12-27 21:24:02
  • java input 调用手机相机和本地照片上传图片到服务器然后压缩的方法

    2023-04-26 08:20:27
  • C#使用集合实现二叉查找树

    2023-06-01 06:17:21
  • IntelliJ IDEA Run时报“无效的源发行版:16“错误问题及解决方法

    2022-06-04 18:08:35
  • Java 超详细图解集合框架的数据结构

    2022-04-14 13:09:00
  • Java定时器Timer简述

    2023-07-20 19:17:16
  • asp之家 软件编程 m.aspxhome.com