Android(13)——RecyclerView列表流行控件,Glide圖片流行框架

Android

安卓開發者指南:https://developer.android.google.cn/guide

1 RecyclerView列表流行控件

1 簡介

同一控件,展示多種不同樣式,特點:
●靈活可配置
●可自定義並可重複利用的 Item
●高度解耦控件:只負責專一的事情

相關類
●LayoutManager:控制樣式展示控制
●Adapter:處理視圖與數據之間的關係
●ViewHolder:容納 ItemView 的實例

基本流程

LinearLayoutManager:線性佈局
GridLayoutManager:網格佈局
StaggeredGridLayoutManager:瀑布流佈局

Adapter
●onCreateViewHolder
●onBindViewHolder
●getItemCount

2 demo

2.1 線性佈局

MyRecyclerViewAdapter.java

public class MyRecyclerViewAdapter extends RecyclerView.Adapter< MyRecyclerViewAdapter.MyViewolder>{
	private List<String> dataSource;
	private Context mContext;
	public MyRecyclerViewAdapter(Context context) {
		this.mContext = context;
		this.dataSource = new ArrayList<>();
	}
	public void setRataSqurce(List<String> dataSource) {
		this.dataSource = dataSource;
		notifyDataSetChanged() ;|
	}
	//實現方法:
	@NonNull
	@Override
	//創建並返回ViewHolder
	public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position){
		return new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_layout,viewGroup,false));
	}
	//ViewHolder綁定數據
	public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int position){  
		myViewHolder.mIv.setImageResource(getIcon(position));
		myViewHolder.mTv.setText(dataSource.get(positinon));
	}
	@Override
	public int getItemCount(){   //返回數據數量
		return dataSource.size();
	}
	private int getIcon (int position) {
		switch (position % 5) {
			case 0:
				return R.mipmap.a;
			case 1 :
				return R.mipmap.b;
			case 2 :
				return R.mipmap.c;
			case 3 :
				return R.mipmap.d;
			case 4:
				return R.mipmap.e;
		}
		return 0;
	}
	class MyViewHolder extends RecyclerView.ViewHolder{
		ImageView mIv;
		TextView mTv;
		public MyViewHolder(@NonNull View itemView){
			super(itemView);
			mIv = itemView.findViewById(R.id.iv);
			mTv = itemView.findViewById(R.id.tv) ;
		}
	}
}

佈局文件item_layout.xml

佈局文件activity_main.xml

MainActivity.java:

反向數據:橫向水平展示,從右到左

2.2 網格佈局

添加數據

切換佈局
從線性佈局切換爲網格佈局

2.3 瀑布流佈局

ItemView的寬度相同,高度不同
1.設置爲高度不同

2.切換佈局

3 ItemAnimator

點擊事件
●默認不支持點擊事件
●通過自定義接口回調 ItemView的點擊事件

ItemAnimator
●notifyItemInserted
●notifyItemRemoved
●notifyItemRangeChanged

2 Glide圖片流行框架

2.1 簡介

關於Glide
Glide是一個快速高效的Android圖片加載庫,注重於平滑的滾動。Glide提供了易用的API,高性能、可擴展的圖片解碼管道(decode pipeline) ,以及自動的資源池技術。

◆ Glide ,一個被google所推薦的圖片加載庫
◆ 作者是Bump Technologies
◆ 這個庫被廣泛運用在google的開源項目中,包括2014年的google I/O大會上發佈的官方app

Glide支持拉取,解碼和展示視頻快照,圖片,和GIF動畫。Glide的Api是如此的靈活,開發者甚至可以插入和替換成自己喜愛的任何網絡棧。默認情況下,Glide使用的是一個定製化的基於HttpUrlConnection的棧,但同時也提供了與Google Volley和Square OkHttp快速集成的工具庫。

加載圖片的種類

加載圖片步驟
◆ 圖片的地址
◆ 把圖片轉換爲可被加載的對象
◆ 通過圖片加載控件展示圖片

2.2 原生代碼加載圖片

佈局文件:

請求網絡的權限;
MainActivity:

在這裏插入圖片描述
注意事項:
1.弊端,大了會出現這樣的情況:Canvas:trying to draw too large( 552960000bytes) bitmap
2.安卓9.0設備上,訪問http協議的請求的話,增加了驗證,要增加配置android: networkSecurityConfig="@xml/network_config"

2.3 Glide加載圖片

引用庫:implementation ‘com.github.bumptech.glide:glide:4.8.0’

最後調用這個方法就完成了。

使用流程
◆.with()-創建圖片加載實例
◆.load()-指定加載的圖片(靜態圖片、gif圖)資源
◆.into()-指定圖片的加載控件

Glide加載網絡圖片是異步加載,設置圖片加載失敗時顯示內容:error(),設置佔位圖:placeholder()

配置過程

方式一:

方式二:封裝成工具類

方式三:Generated API
作用:
◆集成庫可以爲Generated API擴展自定義選項
◆在Application模塊中可將常用的選項打包成一個選項使用

使用步驟:
◆1. 引入Generated API的支持庫:Manifest中:annotationProcessor ‘com.github.bumptech.glide: compiler:4.8.0’;

◆2. 創建類,繼承AppGlideModule並添加@GlideModule註解

◆3. 創建類,添加@GlideExtension註解,並實現private構造函數

◆4. MainActivity中寫個方法去加載,最後調用這個方法就可以。

常用方法、配置

鏈式調用
在這裏插入圖片描述
RequestOptions的常用配置:

在這裏插入圖片描述

圖片加載庫對比
◆UniversalImageLoader:功能強大,使用複雜
◆Volley:異步請求庫,擴展性強,內部封裝了ImageLoader,也可作爲圖片加載庫,但是不如專業的強大
◆Picasso:火爆的圖片加載庫,用法和Glide相同,但是不支持gif圖片加載
◆Glide:谷歌推薦,強大,使用簡單,支持gif加載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章