![【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android學(xué)習(xí)筆記三 Support v7提供交錯(cuò)式網(wǎng)格布局開發(fā)示例_第1頁](http://file4.renrendoc.com/view/6312613810ab3f7985aca61ed3d5e307/6312613810ab3f7985aca61ed3d5e3071.gif)
![【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android學(xué)習(xí)筆記三 Support v7提供交錯(cuò)式網(wǎng)格布局開發(fā)示例_第2頁](http://file4.renrendoc.com/view/6312613810ab3f7985aca61ed3d5e307/6312613810ab3f7985aca61ed3d5e3072.gif)
![【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android學(xué)習(xí)筆記三 Support v7提供交錯(cuò)式網(wǎng)格布局開發(fā)示例_第3頁](http://file4.renrendoc.com/view/6312613810ab3f7985aca61ed3d5e307/6312613810ab3f7985aca61ed3d5e3073.gif)
![【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android學(xué)習(xí)筆記三 Support v7提供交錯(cuò)式網(wǎng)格布局開發(fā)示例_第4頁](http://file4.renrendoc.com/view/6312613810ab3f7985aca61ed3d5e307/6312613810ab3f7985aca61ed3d5e3074.gif)
![【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android學(xué)習(xí)筆記三 Support v7提供交錯(cuò)式網(wǎng)格布局開發(fā)示例_第5頁](http://file4.renrendoc.com/view/6312613810ab3f7985aca61ed3d5e307/6312613810ab3f7985aca61ed3d5e3075.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】[Android學(xué)習(xí)筆記三]Supportv7提供交錯(cuò)式網(wǎng)格布局開發(fā)示例
本文主要介紹AndroidSupportv7提供的RecycleView和交錯(cuò)式布局(通常成為瀑布流布局)的使用和事件監(jiān)聽處理。
1.涉及到開源庫有:
Fresco:
Facebook開源的不是一般強(qiáng)大的圖片加載組件庫
Bufferknife:
AndroidView和事件綁定庫,通過注解完成,在編譯時(shí)APT處理注解文檔。
2.模塊配置
AndroidStudio模塊,build.gradle配置:
apply
plugin:
'com.android.application'
android
{
compileSdkVersion
21
buildToolsVersion
'21.1.2'
defaultConfig
{
applicationId
'secondriver.sdk'
minSdkVersion
16
targetSdkVersion
21
versionCode
1
versionName
'1.0'
}
buildTypes
{
release
{
minifyEnabled
false
proguardFiles
getDefaultProguardFile('proguard-android.txt'),
''
}
}
packagingOptions
{
exclude
'META-INF/services/cessing.Processor'
}
lintOptions
{
disable
'InvalidPackage'
}
}
dependencies
{
compile
fileTree(dir:
'libs',
include:
['*.jar'])
compile
'com.android.support:appcompat-v7:21.0.3'
compile
'com.android.support:recyclerview-v7:21.0.3@aar'
compile
'com.android.support:cardview-v7:21.0.3@aar'
compile
'com.facebook.fresco:fresco:0.8.0'
compile
'com.jakewharton:butterknife:7.0.1'
testCompile
'junit:junit:4.12'
}
3.布局文件
主布局文件:activity_recycleview.xml包含一個(gè)RecycleView,將作為主屏幕組件。
<?xml
version="1.0"
encoding="utf-8"?>
<RelativeLayout
android:id="@+id/swipe_refresh_layout"
xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:scrollbars="vertical"
/>
</RelativeLayout>
RecycleView通過設(shè)置不同的布局管理器對(duì)象來實(shí)現(xiàn)不同的布局顯示,如:
android.support.v7.widget.LinearLayoutManager可以實(shí)現(xiàn)ListView的布局效果
android.support.v7.widget.GridLayoutManager
可以實(shí)現(xiàn)GridView的布局效果
android.support.v7.widget.StaggeredGridLayoutManager可以實(shí)現(xiàn)交錯(cuò)式網(wǎng)格布局效果
次布局文件(RecycleView中顯示的每一項(xiàng)視圖的布局):item_recycelview.xml通過com.android.support:CardView包提供的CardView幀式容器布局包含一個(gè)ImageView和TextView作為RecycleView的每一項(xiàng)視圖的布局。
<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
xmlns:card_view="/apk/res-auto"
xmlns:fresco="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<android.support.v7.widget.CardView
android:id="@+id/card_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
card_view:cardCornerRadius="4dp"
card_view:cardUseCompatPadding="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/info_p_w_picpath"
android:layout_width="300dp"
android:layout_height="420dp"
fresco:actualImageScaleType="centerCrop"
fresco:placeholderImage="@mipmap/ic_launcher"
fresco:roundAsCircle="false"
fresco:roundBottomLeft="true"
fresco:roundBottomRight="true"
fresco:roundTopLeft="true"
fresco:roundTopRight="true"
fresco:roundedCornerRadius="1dp"
fresco:roundingBorderWidth="2dp"
/>
<TextView
android:id="@+id/info_text"
android:layout_width="200dp"
android:layout_height="80dp"
android:textSize="20sp"
android:textColor="@android:color/holo_blue_dark"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_alignLeft="@id/info_p_w_picpath"
android:layout_alignRight="@id/info_p_w_picpath"
android:layout_below="@id/info_p_w_picpath"
android:gravity="left|center_vertical"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
ImageView組件使用的是Fresco庫提供的視圖組件。
4.Activity實(shí)現(xiàn)和數(shù)據(jù)填充
4.1RecycleView中的每一項(xiàng)視圖的數(shù)據(jù)組成
文本信息+圖片地址(url,file,resId)本示例中采用Url網(wǎng)絡(luò)圖片
/**
*
View項(xiàng)的數(shù)據(jù)對(duì)象
*/
static
class
Pair
{
public
String
text;
public
String
url;
public
Pair(String
text,
String
url)
{
this.text
=
text;
this.url
=
url;
}
}
4.2RecycleView中國的每一項(xiàng)視圖的數(shù)據(jù)填充,即適配器
自定義適配器需要實(shí)現(xiàn)RecycleView.Adapter類。
static
class
RecycleViewAdapter
extends
RecyclerView.Adapter<RecyclerView.ViewHolder>
{
/**
*
RecycleView的View項(xiàng)單擊事件監(jiān)聽
*/
public
interface
OnRecycleViewItemClickListener
{
void
onRecycleViewItemClick(View
view,
int
position);
}
private
ArrayList<Pair>
items
=
new
ArrayList<>();
private
OnRecycleViewItemClickListener
mOnRecycleViewItemClickListener;
public
RecycleViewAdapter(ArrayList<Pair>
items)
{
this.items
=
items;
}
@Override
public
RecyclerView.ViewHolder
onCreateViewHolder(ViewGroup
parent,
int
viewType)
{
View
view
=
LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recyclerview,
parent,
false);
return
new
RecycleViewItemHolder(view,
mOnRecycleViewItemClickListener);
}
@Override
public
void
onBindViewHolder(RecyclerView.ViewHolder
holder,
int
position)
{
Pair
pair
=
items.get(position);
((RecycleViewItemHolder)
holder).setContent(pair);
}
@Override
public
int
getItemCount()
{
return
items.size();
}
public
void
setOnRecycleViewItemClickListener(OnRecycleViewItemClickListener
onItemClickListener)
{
if
(null
!=
onItemClickListener)
{
this.mOnRecycleViewItemClickListener
=
onItemClickListener;
}
}
}
主要實(shí)現(xiàn)onCreateViewHolder和onBindViewHolder方法。由于RecycleView并未提供為視圖項(xiàng)添加監(jiān)聽事件,這里自定義個(gè)一個(gè)事件監(jiān)聽接口,在實(shí)例化適配器的時(shí)候可以選擇設(shè)置事件監(jiān)聽。
4.3創(chuàng)建ViewHolder需要通過自定義ViewHolder類繼承RecycleView.ViewHolder。
static
class
RecycleViewItemHolder
extends
RecyclerView.ViewHolder
implements
View.OnClickListener
{
@Bind(R._text)
public
TextView
infoTextView;
@Bind(R._p_w_picpath)
public
SimpleDraweeView
draweeView;
private
RecycleViewAdapter.OnRecycleViewItemClickListener
onItemClickListener;
public
RecycleViewItemHolder(View
itemView,
RecycleViewAdapter.OnRecycleViewItemClickListener
onItemClickListener)
{
super(itemView);
ButterKnife.bind(this,
itemView);
this.onItemClickListener
=
onItemClickListener;
itemView.setOnClickListener(this);
}
public
void
setContent(Pair
pair)
{
infoTextView.setText(pair.text);
draweeView.setImageURI(Uri.parse(pair.url));
}
@Override
public
void
onClick(View
v)
{
if
(null
!=
onItemClickListener)
{
onItemClickListener.onRecycleViewItemClick(v,
getPosition());
}
}
}
在構(gòu)造方法中的傳入OnRecycleViewItemClickListener對(duì)象,并且自定義ViewHolder實(shí)現(xiàn)OnClickListener接口,通過為itemView對(duì)象設(shè)置OnClickListener監(jiān)聽事件,在onClick方法中將點(diǎn)擊事件的處理交由OnRecycleViewItemClickListener對(duì)象處理,從而達(dá)到為RecycleView中的itemView注冊(cè)點(diǎn)擊事件。
如果不采用這種方式添加事件監(jiān)聽,就不需要自定義監(jiān)聽接口和自定義ViewHolder實(shí)現(xiàn)事件監(jiān)聽接口以及事件處理。另外可以通過獲得的itemView之后,通過組件I的獲取組件來添加事件監(jiān)聽。還可以通過獲得的自定義ViewHolder,來訪問每個(gè)組件。
4.4Activity的具體實(shí)現(xiàn)
package
secondriver.sdk.activity;
import
android.app.Activity;
import
.Uri;
import
android.os.Bundle;
import
android.support.v7.widget.DefaultItemAnimator;
import
android.support.v7.widget.RecyclerView;
import
android.support.v7.widget.StaggeredGridLayoutManager;
import
android.util.Log;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.TextView;
import
android.widget.Toast;
import
com.facebook.drawee.view.SimpleDraweeView;
import
java.util.ArrayList;
import
java.util.Arrays;
import
java.util.Random;
import
butterknife.Bind;
import
butterknife.ButterKnife;
import
secondriver.sdk.R;
/**
*
Author
:
secondriver
*
Created
:
2015/11/18
*/
public
class
RecycleViewActivity
extends
Activity
{
private
static
final
String
TAG
=
RecyclerView.class.getName();
private
static
final
String[]
RES_URL
=
new
String[]{
"http://p1.wmpic.me/article/2015/11/16/1447644849_hySANEEF.jpg",
//減少篇幅,此處省去14個(gè)圖片Url
};
@Bind(R.id.recycler_view)
public
RecyclerView
mRecycleView;
private
final
int
PRE_SCREEN_NUMBER
=
6;
private
final
int
SPAN_COUNT
=
2;
private
int
previousLastIndex
=
0;
private
boolean
isSlidingToLast
=
false;
private
RecycleViewAdapter
mAdapter;
private
ArrayList<Pair>
mItem
=
new
ArrayList<>();
//交錯(cuò)式網(wǎng)格布局管理對(duì)象,即通常稱的瀑布流布局
private
StaggeredGridLayoutManager
mLayoutManager;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recyclerview);
ButterKnife.bind(this);
Fresco.initialize(this);
//重要,F(xiàn)resco做一系列初始化工作
initRecycleView();
}
private
void
initRecycleView()
{
mLayoutManager
=
new
StaggeredGridLayoutManager(SPAN_COUNT,
StaggeredGridLayoutManager.VERTICAL);
mRecycleView.setLayoutManager(mLayoutManager);
mAdapter
=
new
RecycleViewAdapter(mItem);
loadData(false);
mRecycleView.setAdapter(mAdapter);
mRecycleView.setItemAnimator(new
DefaultItemAnimator());
//RecycleView的View項(xiàng)單擊事件監(jiān)聽
mAdapter.setOnRecycleViewItemClickListener(new
RecycleViewAdapter.OnRecycleViewItemClickListener()
{
@Override
public
void
onRecycleViewItemClick(View
view,
int
position)
{
long
id
=
mRecycleView.getChildItemId(view);
Log.d(TAG,
"View項(xiàng)的根視圖:"
+
view.getClass().getName()
+
",position="
+
position
+
"
ViewHolder_Id="
+
id);
//通過findViewById查找View項(xiàng)中的元素
SimpleDraweeView
draweeView
=
(SimpleDraweeView)
view.findViewById(R._p_w_picpath);
if
(null
!=
draweeView)
{
draweeView.setImageURI(Uri.parse(RES_URL[0]));
Toast.makeText(RecycleViewActivity.this,
"通過findViewById查找View項(xiàng)中的元素",
Toast.LENGTH_LONG).show();
}
RecycleViewItemHolder
recycleViewItemHolder
=
(RecycleViewItemHolder)
mRecycleView.findViewHolderForPosition(position);
if
(null
!=
recycleViewItemHolder)
{
recycleViewItemHTextView.setText("通過ViewHolder找到View項(xiàng)中的元素");
}
}
});
//下拉刷新,追加內(nèi)容
mRecycleView.setOnScrollListener(
new
RecyclerView.OnScrollListener()
{
@Override
public
void
onScrollStateChanged(RecyclerView
recyclerView,
int
newState)
{
super.onScrollStateChanged(recyclerView,
newState);
if
(newState
==
RecyclerView.SCROLL_STATE_IDLE)
{
if
(isPullToBottom()
&&
isSlidingToLast)
{
if
(mItem.size()
>
36)
{
//最大數(shù)據(jù)量
Toast.makeText(RecycleViewActivity.this,
"沒有數(shù)據(jù)了",
Toast.LENGTH_LONG).show();
return;
}
else
{
loadData(false);
Log.d(TAG,
"notifyItemRangeInserted
startPosition="
+
previousLastIndex);
mAdapter.notifyItemRangeInserted(previousLastIndex,
PRE_SCREEN_NUMBER);
}
}
}
if
(newState
==
RecyclerView.SCROLL_STATE_SETTLING)
{
Log.d(TAG,
"settling");
}
}
@Override
public
void
onScrolled(RecyclerView
recyclerView,
int
dx,
int
dy)
{
super.onScrolled(recyclerView,
dx,
dy);
isSlidingToLast
=
dy
>
0;
//上拉,下滑
L
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度海洋工程設(shè)備采購與安裝服務(wù)協(xié)議
- 生產(chǎn)線的靈活調(diào)度與資源分配
- 2025年度城市排水管網(wǎng)改造土石方工程運(yùn)輸合同
- 大學(xué)生補(bǔ)助申請(qǐng)書
- 2025年度城市垃圾分類處理服務(wù)合作合同
- 店助轉(zhuǎn)正申請(qǐng)書
- 電表分戶申請(qǐng)書
- 游戲產(chǎn)業(yè)生態(tài)開發(fā)與運(yùn)營的協(xié)同發(fā)展策略
- 2025年度渣土運(yùn)輸合同范本電子簽章
- 納稅人注銷申請(qǐng)書
- 2025年蛇年年度營銷日歷營銷建議【2025營銷日歷】
- 攝影入門課程-攝影基礎(chǔ)與技巧全面解析
- 司法考試2024年知識(shí)點(diǎn)背誦版-民法
- 冀少版小學(xué)二年級(jí)下冊(cè)音樂教案
- 【龍集鎮(zhèn)稻蝦綜合種養(yǎng)面臨的問題及優(yōu)化建議探析(論文)13000字】
- 25 黃帝的傳說 公開課一等獎(jiǎng)創(chuàng)新教案
- 人教版音樂三年級(jí)下冊(cè)第一單元 朝景 教案
- 《師范硬筆書法教程(第2版)》全套教學(xué)課件
- 中國聯(lián)通H248技術(shù)規(guī)范
- 孫權(quán)勸學(xué)省公共課一等獎(jiǎng)全國賽課獲獎(jiǎng)?wù)n件
- DL-T-692-2018電力行業(yè)緊急救護(hù)技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論