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