安卓自定義繪製View中遇到的問題

2021-08-04 20:55:54 字數 1234 閱讀 3819

/**

* 第乙個建構函式

*/public mycustomview(context context)

/** * 第二個建構函式

*/public mycustomview(context context, attributeset attrs)

/** * 第三個建構函式

*/public mycustomview(context context, attributeset attrs, int defstyle)

1、在**中直接new乙個custom view例項的時候,會呼叫第乙個建構函式.這個沒有任何爭議.

2、在xml布局檔案中呼叫custom view的時候,會呼叫第二個建構函式.這個也沒有爭議.

3、在xml布局檔案中呼叫custom view並且custom view標籤中還有自定義屬性時這裡呼叫的還是第二個建構函式.

也就是說,系統預設只會呼叫custom view的前兩個建構函式,至於第三個建構函式的呼叫,通常是我們自己在建構函式中主動呼叫的(例如,在第二個建構函式中呼叫第三個建構函式).

遇到如下幾個問題,特此記錄一下:

第一:new paint()的時候要記住放在哪個建構函式裡(我的專案是放在第二個函式裡,我放在了第乙個裡然後報空指標了)。

第二:我在ondraw方法裡this.canvas = canvas; 把畫布弄成全域性的,然後在ondraw方法外面零寫了乙個方法,在該方法中呼叫canvas進行畫柱形圖,but,他也沒有報空指標,但也沒有畫圖(不知道為什麼,後期再研究),為什麼非得在ondraw方法外面另起別的方法進行繪製呢,那就是下面碰到的問題。

第三:從我資料來源類傳我的集合資料給自定義的類,一般情況下,我們都會new一下別的類,然後呼叫對應的建構函式,並把資料當成引數傳進去,but,在自定義的view中這種方法顯然是不可行的,尤其我把自定義view放到了布局裡面,那這個時候怎麼做呢,先在自定義view的類中寫乙個帶引數的方法,這個引數型別就是我要傳的資料的型別,然後在我的資料來源的類中findviewbyid 獲取我的自定義view,並且呼叫對應的方法把值傳進去,具體看**:

//自定義view中

listlist_integer = new arraylist();

public void refreshdraw(listlist_integer)

//ondraw方法中:

for(int i = 0;i目前就更新到這兒吧,後續遇到問題再補充。。。 170803

安卓自定義view繪製尺寸

我們知道view在螢幕上顯示出來要先經過measure和layout.在呼叫onmeasure int widthspec,int heightspec 方法時,要涉及到measurespec的使用,measurespec有3種模式分別是unspecified,exactly和at most,那麼這...

安卓自定義View 座標系篇

由於移動裝置一般定義螢幕左上角為座標原點,向右為x軸增大方向,向下為y軸增大方向,所以在在手機螢幕上的座標系與數學中常見的座標繫在y軸的方向上是相反的。如下圖 下圖中的 是對應的 實際螢幕上的預設座標系如下 其中棕色部分為手機螢幕 注意 view的座標系是相對于父控制項而言的 gettop 獲取子v...

安卓自定義View基礎 座標系

由於移動裝置一般定義螢幕左上角為座標原點,向右為x軸增大方向,向下為y軸增大方向,所以在手機螢幕上的座標系與數學中常見的座標系是稍微有點差別的,詳情如下 ps 其中的 a 是對應的,注意y軸方向!實際螢幕上的預設座標系如下 ps 假設其中棕色部分為手機螢幕 注意 view的座標系統是相對于父控制項而...