欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-01-09 16:28:16
上一篇《android 自定义view(一) paint、rect、canvas介绍》讲了最基础的如何自定义一个view,以及view用到的一些工具类。下面讲下view绘制...

上一篇《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() 最后就是绘制图形了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。