類似QQ空間,微信朋友圈,微博主頁等,展示圖片的九宮格控件,自動根據圖片的數量確定圖片大小和控件大小,使用Adapter模式設置圖片,對外提供接口回調,使用接口加載圖片,支持任意的圖片加載框架,如 Glide,ImageLoader,Fresco,xUtils3,Picasso 等,支持點擊圖片全屏預覽大圖。
該內容轉載至
NineGridView
NineGridView
類似QQ空間,微信朋友圈,微博主頁等,展示圖片的九宮格控件,自動根據圖片的數量確定圖片大小和控件大小,使用Adapter模式設置圖片,對外提供接口回調,支持任意的圖片加載框架,如 Glide,ImageLoader,Fresco,xUtils3,Picasso 等,支持點擊圖片全屏預覽大圖。
該項目是根據:https://github.com/laobie/NineGridImageView 修改而成,進行了優化擴展,使代碼更加簡單,喜歡原作的可以去使用。同時歡迎大家下載體驗本項目,如果使用過程中遇到什麼問題,歡迎反饋。
聯繫方式
- 郵箱地址: [email protected]
- QQ羣: 489873144 (建議使用QQ羣,郵箱使用較少,可能看的不及時)
- 本羣剛建立,旨在爲使用我的github項目的人提供方便,如果遇到問題歡迎在羣裏提問。個人能力也有限,希望一起學習一起進步。
演示
1.用法
使用前,對於Android Studio的用戶,可以選擇添加:
compile 'com.lzy.widget:ninegridview:0.2.0'
或者使用
compile project(':ninegridview')
2.項目功能
- 使用Adapter模式設置圖片
- 當圖片數量只有一張時,自動根據圖片大小調整控件大小
- 默認增加了圖片點擊全屏預覽效果,並附帶預覽動畫
- 使用接口加載圖片,支持任意的圖片加載框架,如 Glide,ImageLoader,Fresco,xUtils3,Picasso 等
- 整合了PhotoView圖片預覽
- 使用接口抽出圖片的加載方式,可以方便的將Glide替換成自己喜歡的ImageLoader等
- 支持fill個grid兩種顯示模式
- 當獲取的圖片數量超過最大顯示的圖片數量時,最後一張圖片上會顯示剩餘數量(類似於QQ的動態效果)
- 使用代碼簡單,只需要幾行代碼
- 其他功能增加中......
3.參數含義
自定義屬性名字 | 參數含義 |
---|---|
ngv_singleImageSize | 只顯示一張圖片時的最大圖片大小 |
ngv_singleImageRatio | 只顯示一張圖片時圖片寬高比 |
ngv_gridSpacing | 網格顯示圖片時,圖片之間的間距,默認3dp |
ngv_maxSize | 最多顯示圖片的數量,默認最大9張 |
ngv_mode | 支持fill和grid兩種顯示模式,其中grid模式在顯示4張圖片時採用2*2的佈局 |
4.代碼演示
1.在Application中初始化NineGridView的圖片加載器
NineGridView.setImageLoader(new PicassoImageLoader());
/** Picasso 加載 */
private class PicassoImageLoader implements NineGridView.ImageLoader {
@Override
public void onDisplayImage(Context context, ImageView imageView, String url) {
Picasso.with(context).load(url)//
.placeholder(R.drawable.ic_default_image)//
.error(R.drawable.ic_default_image)//
.into(imageView);
}
@Override
public Bitmap getCacheImage(String url) {
return null;
}
}
2.在自己的Adapter中初始化NineGridView的適配器
ImageInfo
是庫中提供的數據Bean,需要兩個url,分別表示小圖和大圖的url,沒有大圖或者小圖,則都賦給相同的Url即可。ClickNineGridViewAdapter
是庫中提供的默認實現了點擊預覽的Adapter,如果不想使用預覽效果,可以自己繼承NineGridViewAdapter
實現其中onDisplayImage
方法即可。
ArrayList<ImageInfo> imageInfo = new ArrayList<>();
List<EvaluationPic> imageDetails = item.getAttachments();
if (imageDetails != null) {
for (EvaluationPic imageDetail : imageDetails) {
ImageInfo info = new ImageInfo();
info.setThumbnailUrl(imageDetail.smallImageUrl);
info.setBigImageUrl(imageDetail.imageUrl);
imageInfo.add(info);
}
}
holder.nineGrid.setAdapter(new ClickNineGridViewAdapter(context, imageInfo));