# 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