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() 最后就是绘制图形了
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
SpringMVC中的handlerMappings对象用法
![](https://img.aspxhome.com/file/2023/5/75015_0s.png)
Android 虚拟按键与沉浸式的适配方法
![](https://img.aspxhome.com/file/2023/7/90137_0s.jpg)
Java泛型T,E,K,V,N,?与Object区别和含义
![](https://img.aspxhome.com/file/2023/7/64747_0s.jpg)
Android中子线程和UI线程通信详解
Java8新特性之lambda(动力节点Java学院整理)
IDEA无法使用Git Pull的问题
![](https://img.aspxhome.com/file/2023/5/79945_0s.png)
Java日常练习题,每天进步一点点(42)
![](https://img.aspxhome.com/file/2023/2/75792_0s.png)
Java去掉小数点后面无效0的方案与建议
Spring Boot Admin实践详解
Java Spring开发环境搭建及简单入门示例教程
Android中TextureView与SurfaceView用法区别总结
![](https://img.aspxhome.com/file/2023/2/101852_0s.jpg)
基于Java的MathML转图片的方法(示例代码)
![](https://img.aspxhome.com/file/2023/3/76503_0s.png)
WinForm实现窗体最大化并遮盖任务栏的方法
java线程池使用后到底要关闭吗
![](https://img.aspxhome.com/file/2023/8/108948_0s.png)
Java 随机生成任意组电话号码过程解析
![](https://img.aspxhome.com/file/2023/6/89626_0s.png)
java input 调用手机相机和本地照片上传图片到服务器然后压缩的方法
C#使用集合实现二叉查找树
![](https://img.aspxhome.com/file/2023/3/83353_0s.png)
IntelliJ IDEA Run时报“无效的源发行版:16“错误问题及解决方法
![](https://img.aspxhome.com/file/2023/5/62455_0s.png)
Java 超详细图解集合框架的数据结构
![](https://img.aspxhome.com/file/2023/3/75683_0s.png)