作為自定義view,所有的繪製過程都應該在ondraw()
裡完成,而且應該滿足各種尺寸。效果如下:
幾個重要的屬性:(coordinate是乙個存放座標的類下文給出)
private
int length;//view的長寬
private
int numofgrid = new
int[4][4];//記錄每乙個格中的數字
private coordinate coor;//座標
private
int padding;//方格之間的距離
首先為了保持整個view一直是正方形,重寫onmeasure()
方法:
@override
protected void onmeasure(int widthmeasurespec, int heightmeasurespec) else
setmeasureddimension(length, length);//使長和寬相等,且為二者最小的那個
coor = coordinate.createcoordinate(length);//建立座標,計算各個方格的座標
padding = length / 50;
}
coordinate類:
public
class
coordinate
//建立16個方塊對應的座標
public
static coordinate createcoordinate(int width)
}return res;}}
之後就是重頭戲ondraw()
:
我的想法是自底向上一層一層地鋪。首先畫乙個大正方形作為背景,然後換顏色畫16個小的空白的帶圓角的正方形(通過迴圈畫的,用到了之前計算出來的各個方格的座標),乙個空的棋盤就畫好了。
@override
protected void ondraw(canvas canvas)
}drawgrid(canvas, paint);//根據 numofgrid 畫每乙個格仔
}
之後便是畫帶數字的格仔了:
首先隨機生成兩個數字『2』,即令numofgrid
陣列中的兩個隨機位置的值等於2(預設為0)。接著迴圈遍歷一遍numofgrid
,當裡面的值不為0的時候,在對應的xy座標的位置畫乙個正方形(顏色與數字相關,通過color.set.get(2-2048)
得到,相關**請腦補)。
數字是用canvas.drawtext()
畫的,這個方法與其他draw方法不一樣,起始座標是從左下角開始算的(其他的draw***()
是從左上角開始算的),請務必注意。為了滿足所有尺寸都可以,數字的size必須與總長度相關,試了幾次感覺size為總長度的1/8最好。
private
void
drawgrid(canvas canvas, paint paint) }}
剩下的內容下篇再見。。 Android自定義View 自定義元件
自繪控制項也分兩種,自定義元件和自定義容器,自定義元件是繼承view類,自定義容器時繼承viewgrounp 今天主要分析下自定義元件 還是舉個例子來的實際些,假如我們要畫乙個最簡單的textview,首先想到的就是canvas.drawtext 方法,怎麼畫了?還是得一步一步來 1 寫乙個myte...
自定義view之自定義屬性
1.首先在res的values檔案下新建乙個名為attrs.xml檔案 在該xml檔案中編寫我們需要的屬性 declare styleable後面的name必須要與接下來要自定義的view名一致。attr 後面的name表示需要自定義的屬性,format表示這些屬性的型別 2.新建乙個類繼承text...
Android 自定義View學習 2
為了完成上面的效果還是要用到上一期開頭的四步 1,屬性應該要有顏色,要有速度 2,在構造方法中獲得這些屬性 typedarray a context.obtainstyledattributes attrs,r.styleable.viewcircle,defstyle,0 int n a.geti...