阅读542 返回首页    go 阿里云 go 技术社区[云栖]


MyCalendar 开发日志3

此前由于一直在研究如何把本地的数据库设计出来,耽误的不少时间。现在准备改变思路,先把所有的界面做出来,然后再走后台的数据和结构。


今天开始构造第二个界面,关于单日的任务界面。仿照着此前学习的那个demo,自己写一个类SingleDay_View继承自 view,然后进行重写。 

依旧是同样的思路,重写onMeasrue , onLayout 和onDraw函数,

protected void onLayout(boolean changed, int left, int top, int right,
			int bottom) {
		Log.d(TAG, "[onLayout] changed:"
				+ (changed ? "new size" : "not change") + " left:" + left
				+ " top:" + top + " right:" + right + " bottom:" + bottom);
		if (changed) {
			surface.init();
		}
		super.onLayout(changed, left, top, right, bottom);
	}
	@Override
	protected void onDraw(Canvas canvas){
		//draw the title		
		Path titleBox = new Path();
		titleBox.addRect(0, 0, (float)surface.width, surface.title_height, Direction.CW);
		canvas.drawPath(titleBox, surface.linePaint);
		super.onDraw(canvas);
可是在onDraw函数里面画背景的时候,发现在xml中看不到画出的界面,总是提示一串错误,java.lang.NullPointerException,后来google了一下发现又是空指针。。。

为什么我要用又, 因为在上学的时候,刚写代码的时候,经常出现空指针错误,被师兄起了个外号:“空指针之王”。。。尴尬。现在换了java还是空指针。

然后就看问题出在哪。 

既然是空指针,那肯定是有变量没有赋值。 drawPath就两个参数,第一个参数是刚刚定义的,肯定没问题。那问题肯定是出在surface.linePaint上了,而这个参数是需要surface的类的init函数中定义的。后来才发现我把onLayout里面的surface.init()不知为何注释掉了,那自然是空指针了。

通过这个错误,也明白了,重载自view的类,onLayout是先于onDraw函数调用的。

等这个界面写完了,再贴出完整的代码吧。

最后更新:2017-04-03 12:56:23

  上一篇:go windows7加入windows2008R2域配置
  下一篇:go 一种加快在苹果app store中上架的方法