色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > RecyclerView學(xué)習(xí)筆記(二)——實(shí)現(xiàn)GridView

RecyclerView學(xué)習(xí)筆記(二)——實(shí)現(xiàn)GridView 時(shí)間:2018-09-26      來源:未知

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

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

而RecycleView可以實(shí)現(xiàn):

ListView的功能

GridView的功能

橫向ListView的功能

橫向ScrollView的功能

瀑布流的功能

添加和刪除View子項(xiàng)

這些功能,非常強(qiáng)大,可以看出,它幾乎可以替代所有的動(dòng)態(tài)布局控件。

這么強(qiáng)大的動(dòng)態(tài)布局控件,得益于它的高度解耦,同樣,眾所周知,高度解耦,就意味著復(fù)雜度提升,相較于ListView、GridView等控件,RecycleView才實(shí)現(xiàn)過程是相對(duì)較復(fù)雜的。

RecyclerView的適配器需要繼承自RecyclerView.Adapter,在該適配器將要面向ViewHolder,也就是說,它內(nèi)部已經(jīng)實(shí)現(xiàn)了緩存復(fù)用。

實(shí)現(xiàn)GridView功能

已經(jīng)實(shí)現(xiàn)了ListView,對(duì)于一個(gè)高度解耦的RecyclerView來說,再實(shí)現(xiàn)GridView的功能就非常簡(jiǎn)單了。

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

Java Code

GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 4);

recyclerView.setLayoutManager(gridLayoutManager);

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

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

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);

}

//獲取列數(shù)

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());

}

}

對(duì)View子項(xiàng)的操作和仿制ListView的時(shí)候是一致的。

上一篇:異步通信和同步通信簡(jiǎn)單對(duì)比

下一篇:二維數(shù)組與行指針

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 欧美极品少妇无套实战 | 天天躁夜夜踩很很踩2022 | 中文字幕无码成人免费视频 | 欧美黑人乱大交 | a级成人免费毛片 | 国产成人理论在线观看视频 | 成年免费人香蕉视频在线 | 欧美一区二区三区久久综 | 欧美日韩亚洲tv不卡久久 | 美女光胸无遮挡18禁止观看 | 亚洲综合久久一区二区 | 玩护士睡老师勾搭女下属 | 东京热人妻系列无码专区 | 国产A级护士毛片 | 樱花草视频WWW | 熟女泄火一区二区三区在线 | 理伦少妇片一级 | 青青草国产免费国产是公开 | 国产熟女高潮视频 | 天天av天天翘天天综合网色鬼 | 成年人免费看片 | 久久精美日产AA二线三线 | 久久99精品久久久久久久清纯 | 亚洲AV中文无码乱人伦在线视色 | 香港三日本三级少妇三级视频 | 牛牛视频一区二区三区 | 少妇办公室好紧好爽再浪一点 | 在线观看片免费人成视频播放 | 男人添女人下部全视频 | 女人和拘做受大片免费看 | 日本无遮羞调教打屁股 | 中文字幕乱码熟妇五十中出 | 女性高爱潮aaaa级视频免费 | 亚洲精品国产成人av蜜臀 | 啊灬啊灬啊灬快灬高潮少妇a片 | 性做爰片免费视频毛片中文 | 色噜噜狠狠色综合成人网 | 无码人妻精品一区二区三区在线 | 青青青国产在线观看免费 | 骚妇BB双飞插 | 国产无遮挡裸体美女视频 |