android中的自定義控制項是成為中高階程式設計師必須去克服的乙個課題。學好自定義控制項,需要你對view繪製的原理,觸控手勢的處理,動畫的運用等基礎重要的知識點有較為深刻的認識和見解。
本人打算認真系統的學習下自定義控制項,學習資料來自於大牛「鴻洋」(我用重新實現其中的例項,並把自己碰到的問題疑問和大家分享。進入正題:
lesson 1:
第一步:
先定義自定義控制項的屬性(當然不是所有自定義控制項都需要定義自己的屬性)
<?xml version="1.0" encoding="utf-8"?>
name="titletext"
format="string" />
name="titlecolor"
format="color" />
name="titlesize"
format="dimension" />
name="customtitleview">
name="titletext" />
name="titlecolor" />
name="titlesize" />
declare-styleable>
resources>
第二步:
繼承view,重寫onmeasure,ondraw這個方法,其中onmeasure主要是做了測量控制項需要的大小的工作,ondraw就是繪製view的工作,當然還需要解析自定義的一些屬性
public
class
customtitleview
extends
view
/*** 預設的布局檔案呼叫的是兩個引數的構造方法
* *@param context
*@param attrs
*/public
customtitleview(context context, attributeset attrs)
/*** 在三個引數的構造中獲得自定義屬性
* *@param context
*@param attrs
*@param defstyle
*/public
customtitleview(context context, attributeset attrs, int defstyle)
}a.recycle();// 釋放屬性
// 初始化畫筆
mpaint = new paint();
mpaint.settextsize(mtitlesize);
/*** 獲得繪製文字的寬和高
*/mbound = new rect();
mpaint.gettextbounds(mtitletext, 0, mtitletext.length(), mbound);
}@override
protected
void
onmeasure(int widthmeasurespec, int heightmeasurespec) else
if(heightmode == measurespec.exactly)else
setmeasureddimension(width, height);
}@override
protected
void
ondraw(canvas canvas)
}
重寫onmeasure先要了解的知識點:
了解measurespec的specmode,一共三種型別:
exactly:一般是設定了明確的值或者是match_parent
at_most:表示子布局限制在乙個最大值內,一般為warp_content
unspecified:表示子布局想要多大就多大,很少使用
學習時還遇到乙個小疑問:
getwidth()和getmeasuredwidth()這兩個方法有什麼區別呢?從字面上看getmeasuredwidth()是測量的寬度,getwidth()就是寬度,所以一般情況下兩者是相同的,比如本例中就是相同的,但是也有一些不一樣的情況,比如一些可以滾動的檢視,getmeasuredwidth()往往比getwidth()要大。
總結:
getwidth(): view在設定好布局後整個view的寬度。
getmeasuredwidth(): 對view上的內容進行測量後得到的view內容佔據的寬度,前提是你必須在父布局的onlayout()方法或者此view的ondraw()方法裡呼叫measure(0,0);(measure中的引數的值你自己可以定義),否則你得到的結果和getwidth()得到的結果是一樣的。
第三步:
在布局檔案中運用:
""
xmlns:tools=""
android:layout_width="match_parent"
android:layout_height="match_parent"
.loubf
.customview
.customtitleview
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:layout_centerinparent="true"
>
com.loubf
.customview
.customtitleview>
這樣乙個簡單的自定義控制項就算完成了 機器學習第一課
過擬合就是,通過訓練集進行訓練的時候,模型學習了太多的背景雜訊,讓模型的複雜度高於了真實模型 比如看到齒距型的葉子,就覺得不是葉子 欠擬合是指,模型在訓練集上進行學習的時候,效果就不是很好,沒有充分學習到其中的資訊量,複雜度低於真實模型,得到的模型泛化能力差 比如看到綠色,就覺得是葉子 模型評估指標...
python學習第一課
1.單行注釋 2.或 多行注釋運算子的型別運算子的優先順序運算子tips 參考變數型別 算術運算子 print 1 1 2,加 print 2 1 1,減 print 3 4 12,乘 print 3 4 0.75,除 print 3 4 0,整除 地板除 print 3 4 3,取餘 print ...
學習Appium第一課
腦子不用確實是會生鏽的,三年沒有去學習。我差點忘了自己曾經是計算機專業畢業的,配置個chromedrive花了半天,細思極恐。說說自己入的坑吧。簡單到不能簡單的步驟。2 將該路徑新增到系統環境變數path下 認識到這個問題後重新安裝了32位瀏覽器,沒有重啟 ps 可能出現下圖兩種問題,這是chrom...