通過2048學習自定義view(一)

2021-08-15 04:54:57 字數 1777 閱讀 5466

作為自定義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...