自定義View(一)

2021-07-29 15:03:54 字數 2354 閱讀 2270

對於剛開始學自定義渣渣的我,對自定義還是挺恐慌的,不過上手後就好了。

先總結下自定義view的步驟:

1、自定義view的屬性

2、在view的構造方法中獲得我們自定義的屬性

3、繪製機制:

重寫onmesure (按需求使用)、重寫onsizechange()、重寫onlayout(按需求使用)、重寫ondraw

一、自定義view的屬性

1、首先在res/values/  下建立乙個attrs.xml , 在裡面定義我們的屬性和宣告我們的整個樣式。

<?xml version="1.0" encoding="utf-8"?>

我們定義畫筆顏色,畫筆字型大小2個屬性,format是值該屬性的取值型別:

一共有:string,color,demension,integer,enum,reference,float,boolean,fraction,flag;不清楚的可以google一把。

然後在布局中宣告我們的自定義view

<?xml version="1.0" encoding="utf-8"?>

=""或者具體到哪個包下

二 、在view的構造方法中,獲得我們的自定義的樣式

public class defindview extends view

public defindview(context context, attributeset attrs) catch (exception e)

finally

init();

}public defindview(context context, attributeset attr, int defstyleattr)

private void init();

}

三、我們重寫onsizechange,ondraw,onmesure呼叫系統提供的:

@override

protected void onsizechanged(int w, int h, int oldw, int oldh)

@override

protected void onlayout(boolean changed, int left, int top, int right, int bottom)

@override

protected void ondraw(canvas canvas) else

start_x+=mbounds.centerx();

end_x += mbounds.centerx();

start_y +=mbounds.centery();

end_y +=mbounds.centery();

canvas.drawline(start_x,start_y,end_x,end_y,mpaint);

}canvas.drawcircle(mbounds.centerx(),mbounds.centery(),20,mpaint);

canvas.drawline(mbounds.centerx(),mbounds.centery(),mbounds.centerx(),mbounds.centery()-radius,mpaint);

}// 漸變色處理

private void drawgriend(canvas canvas)

}

四、關於onmeasure系統幫我們測量的高度和寬度都是match_parnet,當我們設定明確的寬度和高度時,系統幫我們測量的結果就是我們設定的結果,當我們設定為wrap_content,或者match_parent系統幫我們測量的結果就是match_parent的長度。

所以,當設定了wrap_content時,我們需要自己進行測量,即重寫onmesure方法」:

重寫之前先了解measurespec的specmode,一共三種型別:

exactly:一般是設定了明確的值或者是match_parent

at_most:表示子布局限制在乙個最大值內,一般為warp_content

unspecified:表示子布局想要多大就多大,很少使用

效果圖:

自定義view(一)

1.什麼是自定義控制項?在android系統中,用系統的自帶控制項重新組合或者自定義類繼承view或者自定義繼承viewgroup,實現特定的ui效果。2.為什麼要學習自定義控制項?1 因為系統的某乙個控制項,在不同的裝置效果不一樣,為了達到效果一樣,就得用自定義控制項。2 為了整個軟體在不同裝置風...

Android 自定義View 一

android的ui介面都是由view和viewgroup及其派生類組合而成的。其中,view是所有ui元件的基類,而viewgroup是容納這些元件的容器,其本身也是從view派生出來的。androidui介面的一般結構可參見下面的示意圖 可見,作為容器的viewgroup可以包含作為葉子節點的v...

android 自定義view 一

android自定義控制項分為兩類,一類是繼承view,一類是繼承viewgroup。由於直接繼承viewgroup是在子view的基礎上進行測量和定位的。自定義view大體上可以分類三類 接下來分析如何做,我們先看整體 public class customerrunline extends vi...