当前位置: 首页 > wzjs >正文

免费自助制作永久网站深圳南山网站建设公司

免费自助制作永久网站,深圳南山网站建设公司,建立一个app需要多少钱,wordpress后台 慢自定义RecyclerView的ItemDecoration,用于处理网格布局的间距,网格布局间距装饰器(支持边缘间距独立控制),为RecyclerView网格布局提供灵活的间距控制,可单独设置各边缘间距。核心功能说明:灵活的边缘控制:…

自定义RecyclerView的ItemDecoration,用于处理网格布局的间距,网格布局间距装饰器(支持边缘间距独立控制),为RecyclerView网格布局提供灵活的间距控制,可单独设置各边缘间距。

核心功能说明:

  1. 灵活的边缘控制:可单独设置首列/末列/首行/末行的间距
  2. 智能间距分配:
  • 多列布局时自动将间距平分到相邻item两侧
  • 单列布局时直接应用指定间距

    3.两种边缘模式:

  • includeEdge=true:默认包含顶部/底部边缘间距
  • includeEdge=false:不包含默认边缘间距(可单独设置)

      4.辅助计算功能:提供getTotalWidthNeeded()方法预计算item宽度

如:GridLayoutManager 设计一个一行4列的,且每列的间距都是10dp

// 在Activity或Fragment中
RecyclerView recyclerView = findViewById(R.id.recyclerView);// 设置GridLayoutManager,4列
GridLayoutManager layoutManager = new GridLayoutManager(this, 4);
recyclerView.setLayoutManager(layoutManager);// 设置ItemDecoration来添加间距
int spacingInPixels = getResources().getDimensionPixelSize(R.dimen.grid_spacing);// 移除旧的 ItemDecoration(避免重复添加)if (recyclerView.getItemDecorationCount() > 0) {recyclerView.removeItemDecorationAt(0);}// 添加自定义边距recyclerView.addItemDecoration(new GridSpacingItemDecoration(4,spacingInPixels ,true,spacingInPixels,spacingInPixels,0,spacingInPixels));// 设置适配器
ImageAdapter adapter = new ImageAdapter(imageList); // 假设有适配器
recyclerView.setAdapter(adapter);

GridSpacingItemDecoration.java 代码:

import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;/*** 网格布局间距装饰器(支持边缘间距独立控制)* 功能:为RecyclerView网格布局提供灵活的间距控制,可单独设置各边缘间距*/
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {private final int spanCount;          // 网格列数private final int spacing;            // 默认间距大小(像素)private final boolean includeEdge;    // 是否包含边缘间距(影响顶部/底部默认行为)// 以下参数为可选边缘间距控制(-1表示使用默认间距)private int includeFirstColumnSpacing = -1;   // 第一列左边距(可覆盖默认值)private int includeLastColumnSpacing = -1;    // 最后一列右边距(可覆盖默认值)private int includeFirstRowTopSpacing = -1;   // 第一行上边距(可覆盖默认值)private int includeLastRowBottomSpacing = -1; // 最后一行下边距(可覆盖默认值)/*** 全参数构造函数* * @param spanCount 网格列数(必须大于0)* @param spacing 默认间距值(像素)* @param includeEdge 是否包含边缘间距(影响顶部/底部默认行为)* @param includeFirstColumnSpacing 第一列左边距(-1表示使用默认间距)* @param includeLastColumnSpacing 最后一列右边距(-1表示使用默认间距)* @param includeFirstRowTopSpacing 第一行上边距(-1表示使用默认间距)* @param includeLastRowBottomSpacing 最后一行下边距(-1表示使用默认间距)*/public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge,int includeFirstColumnSpacing,int includeLastColumnSpacing,int includeFirstRowTopSpacing,int includeLastRowBottomSpacing) {this.spanCount = spanCount;this.spacing = spacing;this.includeEdge = includeEdge;this.includeFirstColumnSpacing = includeFirstColumnSpacing;this.includeLastColumnSpacing = includeLastColumnSpacing;this.includeFirstRowTopSpacing = includeFirstRowTopSpacing;this.includeLastRowBottomSpacing = includeLastRowBottomSpacing;}@Overridepublic void getItemOffsets(Rect outRect, View view, RecyclerView parent,RecyclerView.State state) {int position = parent.getChildAdapterPosition(view); // 当前item位置int column = position % spanCount; // 当前item所在列(0~spanCount-1)int totalItemCount = parent.getAdapter().getItemCount(); // 总item数int totalRows = (int) Math.ceil((double) totalItemCount / spanCount); // 计算总行数int currentRow = position / spanCount + 1; // 当前行号(从1开始)/* ========== 1. 处理左右边距 ========== */if (spanCount == 1) {// 单列特殊情况处理outRect.left = getEffectiveSpacing(includeFirstColumnSpacing, spacing);outRect.right = getEffectiveSpacing(includeLastColumnSpacing, spacing);} else {// 多列常规处理if (column == 0) {// 第一列:左间距可定制,右间距为默认一半outRect.left = getEffectiveSpacing(includeFirstColumnSpacing, spacing);outRect.right = spacing / 2;} else if (column == spanCount - 1) {// 最后一列:左间距为默认一半,右间距可定制outRect.left = spacing / 2;outRect.right = getEffectiveSpacing(includeLastColumnSpacing, spacing);} else {// 中间列:左右间距均为默认一半(实现等间距分布)outRect.left = spacing / 2;outRect.right = spacing / 2;}}/* ========== 2. 处理上下边距 ========== */if (includeEdge) {// 包含边缘模式if (currentRow == 1) {// 第一行顶部间距outRect.top = getEffectiveSpacing(includeFirstRowTopSpacing, spacing);}// 底部间距处理if (currentRow == totalRows) {// 最后一行底部间距可定制outRect.bottom = getEffectiveSpacing(includeLastRowBottomSpacing, spacing);} else if (currentRow < totalRows) {// 中间行固定底部间距outRect.bottom = spacing;}} else {// 不包含边缘模式outRect.top = currentRow == 1 ? getEffectiveSpacing(includeFirstRowTopSpacing, spacing) : spacing;// 最后一行特殊处理if (currentRow == totalRows) {outRect.bottom = getEffectiveSpacing(includeLastRowBottomSpacing, spacing);}}}/*** 获取有效间距值* @param customSpacing 自定义间距值(-1表示使用默认值)* @param defaultSpacing 默认间距值* @return 实际使用的间距值*/private int getEffectiveSpacing(int customSpacing, int defaultSpacing) {return customSpacing > -1 ? customSpacing : defaultSpacing;}/*** 计算RecyclerView需要的总宽度(用于预计算item宽度)* @param screenWidth 屏幕可用宽度* @return 单个item的理论宽度*/public int getTotalWidthNeeded(int screenWidth) {if (spanCount == 0) return screenWidth;// 计算总间距 = 列间间距 + 边缘间距int totalSpacing = (spanCount > 1) ? (spanCount - 1) * spacing : 0;if (includeFirstColumnSpacing > 0) totalSpacing += spacing;if (includeLastColumnSpacing > 0) totalSpacing += spacing;// 返回单个item宽度 = (总宽度 - 总间距) / 列数return (screenWidth - totalSpacing) / spanCount;}
}

http://www.dtcms.com/wzjs/796988.html

相关文章:

  • 英迈思做网站做的怎样安娜尔返利机器人怎么做网站
  • 陕西省信用建设门户网站洛阳网站建设报价
  • 网站开发的著作权和版权产品线上推广渠道
  • 深圳专业营销网站成都有什么好玩的娱乐场所
  • 便宜网站建设成都计算机应用软件开发
  • d代码做网站网站建设主要由哪几个部分组成
  • 国土局网站建设情况软件的开发定制
  • 那些网站可以做问答电子商务系统网站设计
  • 网站反链和外链的区别免费网站你懂我意思正能量软件
  • sql数据库做的网站怎么发布广告商对接平台
  • 快速建站平台源码上海16个区排名
  • 珠海企业网站建设公wordpress ddos
  • 济南住建网站文安网站建设
  • 西宁市建设网站价格低网络营销网站平台有哪些
  • 网站自定义模块南阳定制网站制作价格低
  • 如何做高端网站建设提高wordpress打开速度
  • 网站建设的后如何发布钢笔工具网站
  • 全屏网站怎么做做网站是用什么技术的
  • 阿里巴巴做网站广州建网站价格
  • 平台网站建设报价小说网站怎么建设
  • 云盘做网站空间wordpress官网主题
  • 网站模板库免费传媒公司取名 创意
  • 博达网站建设教程佛山网站设计制作免费咨询
  • 四川网站设计企业门户网站服务器
  • 手机网站头部店铺起名网免费取名
  • 森马网站建设情况网站外包开发 代码的版权问题
  • 厦门博客网站制作建一个简单的网站多少钱
  • 巫山网站开发1688代运营
  • 网站建设用什么工具网站做seo的好处
  • 五合一网站做优化好用吗wordpress代码运行