色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > RecyclerView學習筆記(二)——實現GridView

RecyclerView學習筆記(二)——實現GridView 時間:2018-09-26      來源:未知

RecycleView和ListView一樣,都是做列表顯示View子項的控件,它比ListView更高效和自由。

解析RecycleView,Recycle View意思就是該控件只管回收和顯示View子項,而對于如何顯示,顯示什么,它是不關心的,這給開發過程帶來了極大的便利,比如ListView只能作為單列的列表顯示,GridView將一個界面表格化,通常情況下GridView通過強制View子項的寬度來顯示,在橫豎屏切換時的效果很差。

而RecycleView可以實現:

ListView的功能

GridView的功能

橫向ListView的功能

橫向ScrollView的功能

瀑布流的功能

添加和刪除View子項

這些功能,非常強大,可以看出,它幾乎可以替代所有的動態布局控件。

這么強大的動態布局控件,得益于它的高度解耦,同樣,眾所周知,高度解耦,就意味著復雜度提升,相較于ListView、GridView等控件,RecycleView才實現過程是相對較復雜的。

RecyclerView的適配器需要繼承自RecyclerView.Adapter,在該適配器將要面向ViewHolder,也就是說,它內部已經實現了緩存復用。

實現GridView功能

已經實現了ListView,對于一個高度解耦的RecyclerView來說,再實現GridView的功能就非常簡單了。

新建RecyclerViewDemo2工程。Adapter可以直接拷貝RecyclerViewDemo1中的內容。暫時不考慮分隔線的情況下,只需要將實現ListView時使用的LinnerLayoutManager換成GridLayoutManager即可,只需要改動兩行代碼。

Java Code

GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 4);

recyclerView.setLayoutManager(gridLayoutManager);

非常的方便,那么,在一個界面中通過判斷屏幕方向,使用不同的顯示方式,也就順理成章了。

其他的東西都是不變的,除了布局管理器的改變之外,另一個需要注意的就是分隔線,需要重新繪制。

Java Code

package com.hqyj.dev.recyclerviewdemo2;

import android.content.Context;

import android.content.res.TypedArray;

import android.graphics.Canvas;

import android.graphics.Rect;

import android.graphics.drawable.Drawable;

import android.support.v7.widget.GridLayoutManager;

import android.support.v7.widget.RecyclerView;

import android.support.v7.widget.StaggeredGridLayoutManager;

import android.util.Log;

import android.view.View;

/**

* Created by jiyangkang on 2016/7/16 0016.

*/

public class GridItemDecoration extends

RecyclerView.ItemDecoration {

private Drawable mDivider;

private static final int[] ATTRS = new int[]{

android.R.attr.listDivider

};

public GridItemDecoration(Context context) {

final TypedArray t = context.obtainStyledAttributes(ATTRS);

mDivider = t.getDrawable(0);

t.recycle();

}

@Override

public void onDraw(Canvas c,

RecyclerView parent,

RecyclerView.State state) {

super.onDraw(c, parent, state);

drawHorizontal(c, parent);

drawVertical(c, parent);

}

//獲取列數

private int getSpanCount(RecyclerView parent) {

int spandCount = -1;

RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();

if (layoutManager instanceof GridLayoutManager) {

spandCount = ((GridLayoutManager) layoutManager).getSpanCount();

} else if (layoutManager instanceof StaggeredGridLayoutManager) {

spandCount = (

(StaggeredGridLayoutManager) layoutManager).getSpanCount();

}

return spandCount;

}

private void drawVertical(Canvas c, RecyclerView parent) {

final int childCount = parent.getChildCount();

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

Log.d("Draw_v", "drawVertical: " + i);

final View child = parent.getChildAt(i);

final RecyclerView.LayoutParams params = (

RecyclerView.LayoutParams) child.getLayoutParams();

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

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

final int left = child.getRight();

final int right = left + mDivider.getIntrinsicWidth();

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

mDivider.draw(c);

}

}

private void drawHorizontal(Canvas c, RecyclerView parent) {

int childCount = parent.getChildCount();

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

Log.d("Draw_h", "drawVertical: " + i);

final View child = parent.getChildAt(i);

final RecyclerView.LayoutParams params = (

RecyclerView.LayoutParams) child.getLayoutParams();

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

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

+ mDivider.getIntrinsicWidth();

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

final int bottom = top + mDivider.getIntrinsicHeight();

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

mDivider.draw(c);

}

}

@Override

public void getItemOffsets(Rect outRect,

View view,

RecyclerView parent,

RecyclerView.State state) {

super.getItemOffsets(outRect, view, parent, state);

outRect.set(0,0,mDivider.getIntrinsicWidth(), mDivider.getIntrinsicHeight());

}

}

對View子項的操作和仿制ListView的時候是一致的。

上一篇:異步通信和同步通信簡單對比

下一篇:二維數組與行指針

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 久久国产天堂福利天堂| 亚洲国产精品人久久电影| 久久精品国产清自在天天线| 91色琪琪电影亚洲精品久久| 日本一欧美一欧美一亚洲视频| 欧美国产日韩精品| 欧美裸体男粗大视频在线观看| 国产亚洲成精品久久| 亚洲一区第一页| 自拍偷拍亚洲一区| 久久成人av网站| 精品动漫一区二区三区| 精品欧美激情精品一区| 欧美视频一二三| 51精品国产黑色丝袜高跟鞋| 欧美在线观看网站| 国产91久久婷婷一区二区| 91久久精品视频| 在线视频亚洲欧美| 欧美成人黑人xx视频免费观看| 欧美性xxxxx极品| 狠狠综合久久av一区二区小说| 欧美精品激情在线| 国产精品第3页| 亚洲男人天堂2023| 精品电影在线观看| 日本中文字幕久久看| 亚洲国产毛片完整版| 精品国偷自产在线| 国产91热爆ts人妖在线| 精品小视频在线| 国内精品视频在线| 亚洲美女性视频| 久久久视频精品| 亚洲福利精品在线| 精品久久久久久久中文字幕| 国产欧美一区二区三区四区| 中文国产亚洲喷潮| 国产精品久久久久久久久久ktv | 中文字幕亚洲一区二区三区五十路| 欧美日韩免费区域视频在线观看|