閱讀542 返回首頁    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中上架的方法