對於剛開始學自定義渣渣的我,對自定義還是挺恐慌的,不過上手後就好了。
先總結下自定義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...