注:該筆記是整理學習鴻洋大神自定義view系列部落格的部分知識點。
自定義view(自定義控制項)四大步驟:
1. 自定義view的屬性
2. 在view的構造方法中獲取自定義的屬性
3. 重寫onmesure() 不是選項
4. 重寫ondraw()
自定義view屬性
/** 在res/values下建立乙個attrs.xml檔案 */
name="titletext"
format="string" />
name="titletextsize"
format="dimension" />
name="titletextcolor"
format="color" />
name="image"
format="reference" />
name="imagescaletype">
name="fillxy"
value="0" />
name="center"
value="1" />
attr>
name="customimageview">
name="titletext" />
name="titletextsize" />
name="titletextcolor" />
name="image" />
name="imagescaletype" />
declare-styleable>
resources>
注:format的取值型別有:
string — 字串
color — 顏色值
demension — 尺寸值
integer — 整型值
float — 浮點值
reference — 參考某一資源id
boolean — 布林值
fraction — 百分數
enum — 列舉值
flag — 位或運算
獲取自定義的樣式屬性
public
customtitleview(context context, attributeset attrs, int defstyle)
} a.recycle(); //將typedarray**
/** * 獲得繪製文字的寬和高
*/
mpaint = new paint();
mpaint.settextsize(mtitletextsize);
// mpaint.setcolor(mtitletextcolor);
mbound = new rect();
mpaint.gettextbounds(mtitletext, 0, mtitletext.length(), mbound); //通過 gettextbound(string text,int start,int end,rect bounds) 或者 gettextbound(char text,int index,int count,rect bounds) 獲取繪製的大小
}
重寫onmeasure()
@override
protected
void
onmeasure(int widthmeasurespec, int heightmeasurespec)
else
} /**
* 設定高度
*/
specmode = measurespec.getmode(heightmeasurespec);
specsize = measurespec.getsize(heightmeasurespec);
if (specmode == measurespec.exactly)// match_parent , accurate
else
} setmeasureddimension(mwidth, mheight);
}
自定義View筆記
1.帶刪除按鈕的listview 將觸控事件交給手勢處理器處理 return gesturedetector.ontouchevent event override public boolean ondown motionevent e return false override public vo...
自定義View(一)
對於剛開始學自定義渣渣的我,對自定義還是挺恐慌的,不過上手後就好了。先總結下自定義view的步驟 1 自定義view的屬性 2 在view的構造方法中獲得我們自定義的屬性 3 繪製機制 重寫onmesure 按需求使用 重寫onsizechange 重寫onlayout 按需求使用 重寫ondraw...
自定義view(一)
1.什麼是自定義控制項?在android系統中,用系統的自帶控制項重新組合或者自定義類繼承view或者自定義繼承viewgroup,實現特定的ui效果。2.為什麼要學習自定義控制項?1 因為系統的某乙個控制項,在不同的裝置效果不一樣,為了達到效果一樣,就得用自定義控制項。2 為了整個軟體在不同裝置風...