亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

RecyclerView底部分割線去除的方法

 更新時(shí)間:2020年07月23日 11:07:29   作者:Pichsofts  
如何完美的去除RecyclerView底部分割線?這篇文章主要為大家詳細(xì)介紹了RecyclerView底部分割線去除的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

概述

之前我們拋出了一個(gè)問(wèn)題就是RecyclerView在顯示列表的時(shí)候,最底部也就是最后一個(gè)Item后面還有分割線,這大大影響界面的美觀。這篇文章就是解決這個(gè)問(wèn)題的。

自定義分割線

通過(guò)分析源碼后我們發(fā)現(xiàn)沒(méi)有相關(guān)的方法來(lái)處理這一需求,所以只能自定義分割線,通過(guò)上一篇文章的基礎(chǔ)我們知道肯定是修改getItemOffsets。那我們的思路是讓這個(gè)方法在到最后一個(gè)條目時(shí),不偏移分割線的間隙。同時(shí)也要修改onDraw方法,讓他不再繪制最后一條分割線。

private void drawHorizontal(Canvas c, RecyclerView parent, State state) {
 int childCount = parent.getChildCount() - 1;
 int left = 0;
 int top = parent.getPaddingTop();
 int right = 0;
 int bottom = parent.getHeight() - parent.getPaddingBottom();
 for (int i = 0; i < childCount; i++) {
 View view = parent.getChildAt(i);
 RecyclerView.LayoutParams params = (LayoutParams) view.getLayoutParams(); //考慮,padding
 left = view.getRight();
 right = left + divider.getIntrinsicHeight(); //我們?cè)谧远xdrawable的是是,寫(xiě)死了高度,所以只能用高度
 divider.setBounds(left, top, right, bottom);
 divider.draw(c);
 }
}

/**
 * 思路:就是獲取每個(gè)item,計(jì)算divider的left,top,right,bottom
 */
private void drawVertical(Canvas c, RecyclerView parent, State state) {

 int childCount = parent.getChildCount() - 1;
 int left = parent.getPaddingLeft();
 int top = 0;
 int right = parent.getWidth() - parent.getPaddingRight(); //考慮右邊的padding
 int bottom = 0;
 for (int i = 0; i < childCount; i++) { //不繪制最后一個(gè)條目的分割線
 View view = parent.getChildAt(i);
 RecyclerView.LayoutParams params = (LayoutParams) view.getLayoutParams(); //考慮,padding
 top = view.getBottom() + params.topMargin; //就是當(dāng)前view底部到頂部的距離
 bottom = top + divider.getIntrinsicHeight() - params.bottomMargin; //就是top+divider高度
 divider.setBounds(left, top, right, bottom);
 divider.draw(c);
 }
}

@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {
 int childAdapterPosition = parent.getChildAdapterPosition(view);

 int lastCount = parent.getAdapter().getItemCount() - 1;

 //如果當(dāng)前條目與是最后一個(gè)條目,就不設(shè)置divider padding
 if (childAdapterPosition == lastCount) {
 outRect.set(0, 0, 0, 0);
 return;
 }

 Log.d("TAG", childAdapterPosition + "," + lastCount);
 if (orientation == LinearLayoutCompat.HORIZONTAL) {
 outRect.set(0, 0, divider.getIntrinsicHeight(), 0); //0,0,30,0,設(shè)置寬度
 } else {
 outRect.set(0, 0, 0, divider.getIntrinsicHeight()); //0,0,0,30,設(shè)置高度
 }

}

使用這個(gè)自定義分割線的效果圖如下:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論