542
王者榮耀
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