日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android gridview 间隔线,Android开发之RecyclerView的间隔线处理

發布時間:2025/4/5 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android gridview 间隔线,Android开发之RecyclerView的间隔线处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

RecyclerView沒有默認的分割線,需要自己繪制,接下來我會為大家繪制三種線:水平線、豎直線、和網格線。

廢話少說,馬上開車!!!

---------------------------------------------華麗的分割線------------------------------------------------------------

水平線實現:在原來的代碼中添加

mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));

即可實現分割線,不過默認的分割線顏色個人感覺有點不太漂亮,大家看圖說話:

想要改變分割線的顏色只能在theme中添加該屬性

@drawable/divider_bg

然后在drawable中添加背景色

android:shape="rectangle">

android:centerColor="#ffff0000"

android:endColor="#ffff0000"

android:startColor="#ffff0000"

android:type="linear" />

為了看起來更亮眼我全部設置成了騷紅色,來大家看效果圖:

看一下gridview和瀑布流的效果:

---------------------------------------------華麗的分割線------------------------------------------------------------

豎直線:和水平線同樣的道理只需要改動一點代碼即可只需要把vertical改成horizontal即可。

mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL));

看效果圖:

---------------------------------------------華麗的分割線------------------------------------------------------------

網格線:大家估計該注意到問題了,像gridView網格狀的該怎么搞啊其實有個很簡單的方法,寫一個水平的然后在寫一個豎直的不就ok了嘛。。。

mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL));

mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));

這是一種偷懶的方法,效果嘛就只能呵呵了,大家看效果圖:

丑丑丑。。。

---------------------------------------------華麗的分割線------------------------------------------------------------

網格線的優雅寫法:其實想解決這個問題,沒辦法只有看源碼了,源碼分析我就不帶大家分析了,大家有興趣的自己可以ctrl+鼠標左鍵自行查看,我這里的思路是:重寫ItemDecoration類,同時繪制水平和豎直線,當然了為了保證下面的線不能超過你的內容,需要加以判斷有多少行多少列。。。具體怎么實現的,代碼奉上:(感謝一下dn學院的ricky老師)

public class DividerGridViewItemDecoration extends RecyclerView.ItemDecoration {

private Drawable mDivider;

private int[] attrs = new int[]{android.R.attr.listDivider};

public DividerGridViewItemDecoration(Context context) {

TypedArray typedArray = context.obtainStyledAttributes(attrs);

mDivider = typedArray.getDrawable(0);

typedArray.recycle();

}

@Override

public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {

drawVertical(c, parent);

drawHorizontal(c, parent);

}

private void drawHorizontal(Canvas c, RecyclerView parent) {

// 繪制水平間隔線

int childCount = parent.getChildCount();

for (int i = 0; i < childCount; i++) {

View child = parent.getChildAt(i);

RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

int left = child.getLeft() - params.leftMargin;

int right = child.getRight() + params.rightMargin;

int top = child.getBottom() + params.bottomMargin;

int bottom = top + mDivider.getIntrinsicHeight();

mDivider.setBounds(left, top, right, bottom);

mDivider.draw(c);

}

}

private void drawVertical(Canvas c, RecyclerView parent) {

//繪制垂直間隔線(垂直的矩形)

int childCount = parent.getChildCount();

for (int i = 0; i < childCount; i++) {

View child = parent.getChildAt(i);

RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

int left = child.getRight() + params.rightMargin;

int right = left + mDivider.getIntrinsicWidth();

int top = child.getTop() - params.topMargin;

int bottom = child.getBottom() + params.bottomMargin;

mDivider.setBounds(left, top, right, bottom);

mDivider.draw(c);

}

}

@Override

@Deprecated

public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {

// 四個方向的偏移值

int right = mDivider.getIntrinsicWidth();

int bottom = mDivider.getIntrinsicHeight();

if (isLastColum(itemPosition, parent)) {//是否是最后一列

right = 0;

}

if (isLastRow(itemPosition, parent)) {//是最后一行

bottom = 0;

}

outRect.set(0, 0, right, bottom);

}

/**

* 是否是最后一行

*/

private boolean isLastRow(int itemPosition, RecyclerView parent) {

int spanCount = getSpanCount(parent);

RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();

//有多少列

if (layoutManager instanceof GridLayoutManager) {

int childCount = parent.getAdapter().getItemCount();

int lastRowCount = childCount % spanCount;

//最后一行的數量小于spanCount

if (lastRowCount == 0 || lastRowCount < spanCount) {

return true;

}

}

return false;

}

/**

* 判斷是否是最后一列

*/

private boolean isLastColum(int itemPosition, RecyclerView parent) {

RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();

//有多少列

if (layoutManager instanceof GridLayoutManager) {

int spanCount = getSpanCount(parent);

if ((itemPosition + 1) % spanCount == 0) {

return true;

}

}

return false;

}

private int getSpanCount(RecyclerView parent) {

RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();

if (layoutManager instanceof GridLayoutManager) {

GridLayoutManager lm = (GridLayoutManager) layoutManager;

int spanCount = lm.getSpanCount();

return spanCount;

}

return 0;

}

}

然后添加一下代碼即可優雅的實現網格效果的線

DividerGridViewItemDecoration dividerGridViewItemDecoration = new DividerGridViewItemDecoration(this);

mRecyclerView.addItemDecoration(dividerGridViewItemDecoration);

效果圖走起:

---------------------------------------------華麗的分割線------------------------------------------------------------

下一節還是帶領大家繼續處理recyclerView的相關問題,還望大家支持。。。

總結

以上是生活随笔為你收集整理的android gridview 间隔线,Android开发之RecyclerView的间隔线处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 动漫美女揉胸 | www.sesehu| 极品少妇一区二区 | 狠狠干婷婷| 久久久久久久爱 | 国产主播99| 大白屁股一区二区视频 | 欧美一级高潮片 | 毛片动漫| 国产成人精品在线观看 | 不卡的av在线播放 | 欧美成人三级在线视频 | 成人一级片视频 | 九九三级| 日韩精品免费在线视频 | a级黄色录像 | 欧美成人精品一区 | 午夜欧美在线 | 米奇影视第四色 | 特级西西444www高清大胆免费看 | 国产福利片在线观看 | 男人插入女人下面的视频 | 国产免费一区二区三区在线观看 | 黄色一级片黄色一级片 | 国产 欧美 日韩 | 欧美精品18 | 国内精品久久久久 | 韩国禁欲系高级感电影 | 国产在线视频你懂的 | 日日狠狠久久偷偷四色综合免费 | 亚欧美视频 | 老头吃奶性行交 | 欧美午夜精品一区二区蜜桃 | 男人天堂一区二区 | 国产精品一二三四区 | 人妻精品一区二区三区 | 福利社区一区二区 | 青青青免费视频观看在线 | 亚洲91网| 亚洲人成小说 | 性欧美大战久久久久久久久 | 九九影院最新理论片 | 9191av| 夜夜嗨aⅴ一区二区三区 | 黑人黄色大片 | 黄色三级av | 精品国自产在线观看 | 农村末发育av片一区二区 | 欧美第五页 | 制服丝袜第一页在线观看 | 亚洲色图国产视频 | 又色又爽又高潮免费视频国产 | 欧美v亚洲 | 久久国产人妻一区二区免色戒电影 | 欧美日韩精品在线观看视频 | 91久久久久久| 日韩一区在线播放 | 97在线视频免费观看 | 国产18禁黄网站免费观看 | 天天干人人干 | 国产夫妻视频 | 久久精品福利 | 成人免费福利 | 欧美巨鞭大战丰满少妇 | 成人精品视频一区二区三区尤物 | 狠狠艹视频 | 精品国产99久久久久久宅男i | 亚洲人妖在线 | 欧美一二三 | 久久久久99精品成人片试看 | 韩国女主播一区二区 | 亚洲 日本 欧美 中文幕 | 清清草免费视频 | 一区二区三区四区高清视频 | 美女网站免费观看 | 欧美人妖老妇 | jizzjizz视频 | 影音先锋亚洲一区 | 欧美男人亚洲天堂 | 亚洲久久色 | 一级黄色免费 | 91免费视频播放 | 中文字幕a√ | 国产成人三级在线观看 | 日本熟妇一区二区 | 伊人五月综合 | 男女日日| 国产一级片中文字幕 | 男人的天堂在线视频 | 久久艹免费视频 | 久久精品97 | 福利一区二区 | 国产黄色网址在线观看 | av在线网页| www.av小说| 久久亚洲欧美 | 久久夜靖品2区 | 欧美精品 日韩 | 老熟女高潮一区二区三区 |