文章目錄
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加載