自定義九宮格載入的實現

2021-08-03 23:11:58 字數 4720 閱讀 5384

要完成自定義載入的九宮格的步驟

1:寫乙個類繼承viewgroup,同時實現他的構造方法,當然自己使用實現兩個就完全可以了,不要忘了viewgroup還有乙個必須實現的方法onlaout

public classsudokuextendsviewgroup
publicsudoku(context context) 

publicsudoku(context context, attributeset attrs)

publicsudoku(context context, attributeset attrs,intdefstyleattr)

//這個方法是用來控制子view擺放的位置的這裡我們不做處理
@override

protected voidonlayout(booleanchanged,intl,intt,intr,intb)

//init方法是用來初始化屬性的

private voidinit(context context, attributeset attrs)
//在這裡我們看到了自定義屬性。怎麼設定自定義屬性呢?需要在res檔案中的values資料夾裡建立atts.xml檔案,已有的就不用建立了
<declare-styleablename="sudokulayoutstyle">

<attrname="space"format="dimension">attr>

<attrname="column_image"format="integer">attr>

<attrname="total_width"format="dimension">attr>

<attrname="oneimage_maxwidth"format="dimension">attr>

<attrname="oneimage_maxheight"format="dimension">attr>

declare-styleable>

//自定義屬性設定完了那我們就需要對外放開乙個方法載入
public voidsetimagedata(intif(image.length== 0)else if(image.length== 1)

else

else

}}else

//設定檢視寬高

if(image.length==0)

else if(image.length==1)

else

else

//通過每個item的寬高計算出layout整體寬高 這裡要注意因為這裡new的是linearlayout所以使用時布局一定要是linearlayout,否則會報錯

linearlayout.layoutparams params=newlinearlayout.layoutparams(space*(column+1)+column*itemw,space*(row+1)+row*itemh);

params.leftmargin= commonutils.dp2px(context, 45);

params.topmargin=commonutils.dp2px(context, 10);

setlayoutparams(params);

}//新增檢視

if(image.length!=0)

}

else

//新建立的比之前的要少,則新增缺少的部分

else if(oldnum< image.length) }}

oldnum= image.length;

}else

//設定每乙個的寬高

for(inti = 0; i < getchildcount(); i++)

}});

introw=i/imcolumn+1;

intcolumn=i%imcolumn+1;

intleft=space*column +itemw*(column-1);

inttop=space*row +itemh*(row-1);

intright=left+itemw;

intbottom=top+itemh;

imageview.layout(left, top, right, bottom);

}

}
//獲取寬和高的方法
private intgetimgaewidth(intid)

private intgetimgaeheight(intid)

以上就是自定義的所有方法了剩下的就剩在布局中使用了

xmlns:=""//要是有自定義屬性一定要加這一句android:layout_width="match_parent"android:layout_height="wrap_content":space="3dip":total_width="150dip":oneimage_maxwidth="240dip":oneimage_maxheight="240dip"android:id="@+id/im_su">

自定義容器實現網格(九宮格)布局效果

前言 在近期的專案開發中,需要在列表的item中實現網格布局的ui效果,考慮到列表的效能和布局巢狀的層次等因素,最後決定自己寫乙個支援網格布局效果的容器,直接在列表的item中使用該容器就可以支援網格 九宮格 的顯示效果。避免了在列表中巢狀列表的實現方式。下面的類feedbasegridview支援...

Flex實現九宮格

關鍵點 利用了padding top和flex wrap wrap,當設定background color時,是包括盒子模型中的content和padding的,但是為什麼不設定height呢?因為父元素沒有高度,所以定義height 30 是沒有用的,且若想每個block都為正方形,最好的方式就是...

如何實現九宮格

九宮格容器是寬高相等的正方形,實現九宮格有幾種方法,這裡列舉一二 對於網格布局來說,grid 比 flex 更為方便,量更少,可以處理更為複雜的結構。如以下 square square inner grid 1234567 89效果 square 效果 除了浮動,這裡 li 也可以使用display...