一、自定義ViewGroup:
新豐網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站開(kāi)發(fā)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
1、構(gòu)造方法的選擇:
獲取一些需要用到的值(一些屬性或自定義屬性)
Public CustonViewGroup(Context context){this(context, null);}
Public CustonViewGroup(Context context, AttributeSet attrs){this(context, attrs, 0);}
attrs在布局文件中聲明,上述兩個(gè)構(gòu)造方法不能有自定義屬性
Public CustonViewGroup(Context context, AttributeSet attrs, int defStyleAttr)
該構(gòu)造方法在有自定義屬性情況下調(diào)用
2、onMeasure:
計(jì)算子View的寬和高以及設(shè)置自己的寬和高
3、onLayout:
決定子View的布局的位置
4、onTouchEvent:
監(jiān)聽(tīng)觸摸事件,如手指按下或放開(kāi),根據(jù)需要決定是否重載該方法
二、自定義屬性:
1、創(chuàng)建attr.xml文件:
在文件中進(jìn)行相關(guān)屬性的定義,例如:
其中attr name為自定義屬性名,declare-styleable name為自定義ViewGroup名
2、在布局文件中使用:
復(fù)制xmlns:android的前一部分"http://schemas.android.com/apk",后一部分用"/res/包名"或者"/res-auto"。
3、在3個(gè)參數(shù)的構(gòu)造方法中獲得自定義屬性的值:
// 獲取我們定義的屬性
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.SlidingMenu, defStyleAttr,0);
int n = a.getIndexCount();
for(int i = 0; i < n; i++) {
int attr = a.getIndex(i);
switch (attr) {
case R.styleable.SlidingMenu_rightPadding:
mMenuRightPadding = a.getDimensionPixelOffset(attr,
(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, context.getResources().getDisplayMetrics()));
break;
}
}
a.recycle();
三、自定義View:
1、attr.xml
2、布局文件中使用
3、構(gòu)造方法中獲取自定義屬性
4、onMeasure
5、onDraw
onDraw區(qū)別于自定義ViewGroup中的onLayout