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

RecyclerView的萬能分割線

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

什么是RecyclerView

RecyclerView是Android 5.0 materials design中的組件之一,相應(yīng)的還有CardView、Palette等??疵治覀兙湍芸闯鲆稽c(diǎn)端倪,沒錯,它主要的特點(diǎn)就是復(fù)用。我們知道,Listview中的Adapter中可以實(shí)現(xiàn)ViewHolder的復(fù)用。RecyclerView提供了一個耦合度更低的方式來復(fù)用ViewHolder,并且可以輕松的實(shí)現(xiàn)ListView、GridView以及瀑布流的效果。

先給大家展示下效果圖:

使用方法:

添加默認(rèn)分割線:高度為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;//分割線高度,默認(rèn)為1px
private int mOrientation;//列表的方向:LinearLayoutManager.VERTICAL或LinearLayoutManager.HORIZONTAL
private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
/**
* 默認(rèn)分割線:高度為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的萬能分割線,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 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實(shí)現(xiàn)流光和光影移動效果代碼

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

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

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

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

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

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

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

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

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

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

    Android組件化工具ARouter使用方法詳細(xì)分析

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

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

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

    Android中Handler消息傳遞機(jī)制

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

    Android AlertDialog對話框用法示例

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

最新評論

邹平县| 台湾省| 堆龙德庆县| 潼南县| 天长市| 科技| 汤阴县| 虞城县| 安庆市| 稷山县| 瑞安市| 奉贤区| 大洼县| 阿拉善盟| 澄迈县| 马鞍山市| 尼木县| 宿迁市| 乌拉特中旗| 菏泽市| 惠东县| 衡阳县| 伊宁县| 吉木萨尔县| 邯郸县| 诏安县| 贡嘎县| 荔波县| 和静县| 芜湖县| 鄂尔多斯市| 通城县| 彩票| 扶绥县| 道孚县| 彭山县| 郑州市| 连平县| 如东县| 利津县| 独山县|