最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

RecyclerView的萬能分割線

 更新時間:2016年07月20日 15:27:29   投稿:mrr  
RecyclerView 是Android L版本中新添加的一個用來取代ListView的SDK,它的靈活性與可替代性比listview更好。本文重點給大家介紹RecyclerView的萬能分割線的知識,非常不錯,感興趣的朋友一起看下吧

什么是RecyclerView

RecyclerView是Android 5.0 materials design中的組件之一,相應的還有CardView、Palette等。看名字我們就能看出一點端倪,沒錯,它主要的特點就是復用。我們知道,Listview中的Adapter中可以實現(xiàn)ViewHolder的復用。RecyclerView提供了一個耦合度更低的方式來復用ViewHolder,并且可以輕松的實現(xiàn)ListView、GridView以及瀑布流的效果。

先給大家展示下效果圖:

使用方法:

添加默認分割線:高度為2px,顏色為灰色

mRecyclerView.addItemDecoration(new RecycleViewDivider(mContext, LinearLayoutManager.VERTICAL));

添加自定義分割線:可自定義分割線drawable

mRecyclerView.addItemDecoration(new RecycleViewDivider(
mContext, LinearLayoutManager.VERTICAL, R.drawable.divider_mileage));

添加自定義分割線:可自定義分割線高度和顏色

mRecyclerView.addItemDecoration(new RecycleViewDivider(
mContext, LinearLayoutManager.VERTICAL, 10, getResources().getColor(R.color.divide_gray_color)));

萬能分割線登場:

public class RecycleViewDivider extends RecyclerView.ItemDecoration {
private Paint mPaint;
private Drawable mDivider;
private int mDividerHeight = 2;//分割線高度,默認為1px
private int mOrientation;//列表的方向:LinearLayoutManager.VERTICAL或LinearLayoutManager.HORIZONTAL
private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
/**
* 默認分割線:高度為2px,顏色為灰色
*
* @param context
* @param orientation 列表方向
*/
public RecycleViewDivider(Context context, int orientation) {
if (orientation != LinearLayoutManager.VERTICAL && orientation != LinearLayoutManager.HORIZONTAL) {
throw new IllegalArgumentException("請輸入正確的參數(shù)!");
}
mOrientation = orientation;
final TypedArray a = context.obtainStyledAttributes(ATTRS);
mDivider = a.getDrawable(0);
a.recycle();
}
/**
* 自定義分割線
*
* @param context
* @param orientation 列表方向
* @param drawableId 分割線圖片
*/
public RecycleViewDivider(Context context, int orientation, int drawableId) {
this(context, orientation);
mDivider = ContextCompat.getDrawable(context, drawableId);
mDividerHeight = mDivider.getIntrinsicHeight();
}
/**
* 自定義分割線
*
* @param context
* @param orientation 列表方向
* @param dividerHeight 分割線高度
* @param dividerColor 分割線顏色
*/
public RecycleViewDivider(Context context, int orientation, int dividerHeight, int dividerColor) {
this(context, orientation);
mDividerHeight = dividerHeight;
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(dividerColor);
mPaint.setStyle(Paint.Style.FILL);
}
//獲取分割線尺寸
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.set(0, 0, 0, mDividerHeight);
}
//繪制分割線
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDraw(c, parent, state);
if (mOrientation == LinearLayoutManager.VERTICAL) {
drawVertical(c, parent);
} else {
drawHorizontal(c, parent);
}
}
//繪制橫向 item 分割線
private void drawHorizontal(Canvas canvas, RecyclerView parent) {
final int left = parent.getPaddingLeft();
final int right = parent.getMeasuredWidth() - parent.getPaddingRight();
final int childSize = parent.getChildCount();
for (int i = 0; i < childSize; i++) {
final View child = parent.getChildAt(i);
RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();
final int top = child.getBottom() + layoutParams.bottomMargin;
final int bottom = top + mDividerHeight;
if (mDivider != null) {
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
if (mPaint != null) {
canvas.drawRect(left, top, right, bottom, mPaint);
}
}
}
//繪制縱向 item 分割線
private void drawVertical(Canvas canvas, RecyclerView parent) {
final int top = parent.getPaddingTop();
final int bottom = parent.getMeasuredHeight() - parent.getPaddingBottom();
final int childSize = parent.getChildCount();
for (int i = 0; i < childSize; i++) {
final View child = parent.getChildAt(i);
RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();
final int left = child.getRight() + layoutParams.rightMargin;
final int right = left + mDividerHeight;
if (mDivider != null) {
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
if (mPaint != null) {
canvas.drawRect(left, top, right, bottom, mPaint);
}
}
}
}

以上所述是小編給大家介紹的RecyclerView的萬能分割線,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • android開發(fā)環(huán)境搭建詳解(eclipse + android sdk)

    android開發(fā)環(huán)境搭建詳解(eclipse + android sdk)

    這篇文章主要介紹了android開發(fā)環(huán)境搭建詳解(eclipse + android sdk),需要的朋友可以參考下
    2014-05-05
  • Android實現(xiàn)流光和光影移動效果代碼

    Android實現(xiàn)流光和光影移動效果代碼

    大家好,本篇文章主要講的是Android實現(xiàn)流光和光影移動效果代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android開發(fā)之Button事件實現(xiàn)與監(jiān)聽方法總結

    Android開發(fā)之Button事件實現(xiàn)與監(jiān)聽方法總結

    這篇文章主要介紹了Android開發(fā)之Button事件實現(xiàn)與監(jiān)聽方法,結合實例形式總結分析了Android開發(fā)中Button事件的兩種實現(xiàn)方法以及針對Button控件的幾種常用監(jiān)聽方法,需要的朋友可以參考下
    2016-01-01
  • 基于Flutter制作一個吃豆人加載動畫

    基于Flutter制作一個吃豆人加載動畫

    這篇文章主要為大家介紹了如何利用Flutter制作出吃豆人加載動畫效果,文中的示例代碼講解詳細,快跟隨小編一起動手嘗試一下
    2022-04-04
  • 快速搞懂Android口令加密(一)

    快速搞懂Android口令加密(一)

    這篇文章主要介紹了快速搞懂Android口令加密(一)的相關資料,需要的朋友可以參考下
    2016-04-04
  • Kotlin原理詳析之拓展函數(shù)

    Kotlin原理詳析之拓展函數(shù)

    kotlin中的擴展函數(shù),實際上是在自己的類中添加了一個static final方法,將需要擴展的類,在使用的時候作為第一個參數(shù)傳入方法中,然后使用,這篇文章主要給大家介紹了關于Kotlin原理詳析之拓展函數(shù)的相關資料,需要的朋友可以參考下
    2022-01-01
  • Android組件化工具ARouter使用方法詳細分析

    Android組件化工具ARouter使用方法詳細分析

    這篇文章主要介紹了Android組件化工具ARouter使用方法,組件化項目存在各個模塊之間耦合,通信麻煩的問題,為了解決這個問題,阿里巴巴的開發(fā)者就搞出了Arouter這個框架,以解決上述問題
    2022-10-10
  • Flutter深色模式適配的實現(xiàn)

    Flutter深色模式適配的實現(xiàn)

    這篇文章主要介紹了Flutter深色模式適配的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Android中Handler消息傳遞機制

    Android中Handler消息傳遞機制

    這篇文章主要介紹了Android中Handler消息傳遞機制 的相關資料,需要的朋友可以參考下
    2016-03-03
  • Android AlertDialog對話框用法示例

    Android AlertDialog對話框用法示例

    這篇文章主要介紹了Android AlertDialog對話框用法,結合實例形式分析了AlertDialog對話框的功能及常見使用技巧,需要的朋友可以參考下
    2016-06-06

最新評論

泰宁县| 北宁市| 乌苏市| 巢湖市| 轮台县| 图们市| 连平县| 惠州市| 九寨沟县| 平阳县| 嘉祥县| 罗平县| 革吉县| 化德县| 南汇区| 通化市| 中西区| 阿克陶县| 兴安盟| 辉县市| 即墨市| 石城县| 红桥区| 扶风县| 盐池县| 巫山县| 平陆县| 常熟市| 绿春县| 濮阳市| 鹤岗市| 老河口市| 尉氏县| 双江| 应用必备| 日土县| 雅江县| 清涧县| 前郭尔| 大名县| 宁都县|