# GridBuilder GridBuilder是將Android原生容器GridLayout進行封裝,只需在指定GridLayout在布局中的位置,即可通過GridBuilder生成動態柵格布局。 ![](screenshots/GridBuilder_1.png) 無數據DEMO截圖 ![](screenshots/GridBuilder_2.jpg) 商用截圖 ## Module: **GridBuilderLib**:GridBuilder Library **GridBuilderDemo**:應用Demo ## Lib結構: **/calculator**:動態布局計算器 **/listener** :監聽器 **/utils**:工具類(目前只有倒影生成工具) **GridBuilder**:Lib統壹入口,核心類 **GridItem**:數據對象必須繼承該抽象類,以規定行列信息 **IGridItemView**:GridLayout中的Child View必須實現其接口 ## 特點: 1. 全面支持Android非觸屏端(盒子、TV),支持焦點放大動效 2. 支持自定義布局算法(默認自帶橫向布局Calculator) 3. 支持橫縱向延伸(需在GridLayout外套ScrollView/HorizontalScrollView) 4. 支持動態倒影 ## 使用方法: 1.在layout.xml中放置GridLayout 2.自定義View實現IGridItemView接口 public class TestGridItemView extends View implements IGridItemView { private GridItem mGridItem; public TestGridItemView(Context context) { super(context); } public TestGridItemView(Context context, AttributeSet attrs) { super(context, attrs); } public TestGridItemView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public GridItem getGridItem() { return mGridItem; } @Override public void setGridItem(GridItem gridItem) { mGridItem = gridItem; } } 3.自定義數據對象,繼承GridItem: public TestItem extends GridItem { // 可添加其他字段以創建自定義View } 4.定義或獲取GridItem數據List,GridItem可包含行列跨度信息: List gridItemList = new ArrayList<>(); TestItem item = new TestItem(); item.setRowSpec(2); item.setColumnSpec(3); gridItemList.add(item); 5.使用GridBuilder創建動態布局 GridBuilder.newInstance(this, mGridLayout) // 設置item獲取焦點時的放大大小 .setScaleSize(10, 10) // 設置item獲取焦點時放大的動畫delay .setScaleAnimationDuration(200) // 設置計算器 .setPositionCalculator(new HorizontalPositionCalculator(5)) // 設置默認item長寬 .setBaseSize(100, 100) // 設置item之間距離 .setMargin(10) // 設置整個柵格布局外邊距 .setOutMargin(50, 50, 50, 50) // 設置數據 .setGridItemList(gridItemList) // 設置View Holder(用於View被remove後的復用) .setViewHolder(holder) // 創建Child View .setOnCreateViewCallBack(new OnViewCreateCallBack() { @Override public View onViewCreate(LayoutInflater inflater, View convertView, GridItem gridItem) { TestGridItemView view; if (null == convertView) { view = new TestGridItemView(mContext); } else { view = (TestGridItemView) convertView; } view.setGridItem(gridItem); return view; } }) .build(); ## 待完善: 1. 動態焦點樣式 2. 資源回收/childView復用 3. 更友好的adapter模式 ## 支持: 任何問題可以在項目中[提交bug報告](https://github.com/Eason90/GridBuilder/issues),也可以發送郵件以尋求幫助。 Email: easonx1990@gmail.com