*****
**RecycleView**
# Material Design新控件
Material Design(材料設計)是Google在2014年I/O大會上發布的一種新的設計規范,最開始只支持5.0及其以上的設備,隨后不久Google就退出了其兼容庫Android Design Support Library,兼容至2.1.使用material design新控件,android應用的整體美觀提升很大程度
* DrawerLayout
* TabLayout
* RecyclerView.........等
# RecycleView
1.RecyclerView是什么?
RecylerView是support-v7包中的新組件,是一個強大的滑動組件,與經典的ListView相比,同樣擁有item回收復用的功能,這一點從它的名字recylerview即回收view也可以看出。看到這也許有人會問,不是已經有ListView了嗎,為什么還要RecylerView呢?這就牽扯到第二個問題了。
2.RecyclerView的優點是什么?
根據官方的介紹RecylerView是ListView的升級版,既然如此那RecylerView必然有它的優點,現就RecylerView相對于ListView的優點羅列如下:
* RecylerView封裝了viewholder的回收復用,也就是說RecylerView標準化了ViewHolder,編寫Adapter面向的是ViewHolder而不再是View了,復用的 邏輯被封裝了,寫起來更加簡單。
* 提供了一種插拔式的體驗,高度的解耦,異常的靈活,針對一個Item的顯示RecylerView專門抽取出了相應的類,來控制Item的顯示,使其的擴展性非常強。例如:你想控制橫向或者縱向滑動列表效果可以通過LinearLayoutManager這個類來進行控制(與GridView效果對應的是GridLayoutManager,與瀑布流對應的還有StaggeredGridLayoutManager等),也就是說RecylerView不再拘泥于ListView的線性展示方式,它也可以實現GridView的效果等多種效果。你想控制Item的分隔線,可以通過繼承RecylerView的ItemDecoration這個類,然后針對自己的業務需求去抒寫代碼。
非常強大,可以展示listView和GridView,并且還能橫向展示(HorizontalScrollview)
* 可以控制Item增刪的動畫,可以通過ItemAnimator這個類進行控制,當然針對增刪的動畫,RecylerView有其自己默認的實現。
3.實現效果特點及使用
1.添加依賴:RecyclerView
抽取一個跳轉頁面的方法enterActivity(Context context,Class clazz)
studio中使用快捷鍵將點擊事件創建到activity
2.效果
* 單行,多行,橫向排列顯示(單橫,多橫)
此時只需要更改布局管理者對象即可,然后調用一下刷新的方法
recyclerView的適配器繼承的時候需要傳入關聯的holder,多條目的時候不需要,但是要在用到的位置向下轉型....分塊的,面向holder去寫代碼
* recyclerView.setLayoutManager(new LinearLayoutManager(this));
* recyclerView.setLayoutManager(new GridLayoutManager(this,3));
* recyclerView.setLayoutManager(new LinearLayoutManager(this,RecyclerView.HORIZONTAL,false));
* recyclerView.setLayoutManager(new GridLayoutManager(this,3,RecyclerView.HORIZONTAL,false));//false表示不反轉...可以進行反轉顯示
* 瀑布流效果
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,RecyclerView.VERTICAL));
* ViewGroup.LayoutParams layoutParams = holder.text_01.getLayoutParams();
* layoutParams.height = heightList.get(position);
* holder.text_01.setLayoutParams(layoutParams);
* holder.text_01.setBackgroundColor(Color.rgb((int) (100+ Math.random()*155),(int) (100+ Math.random()*155),(int) (100+ Math.random()*155)));
* 條目點擊事件
//設置點擊事件...實際上是對適配器設置點擊事件waterFallAdapter.setOnItemClickListner(new OnItemClickListner() {
* 間隔線處理(添加下劃線)
* 多條目效果展示
* 條目動畫
* 條目拖動刪除效果
* 下拉刷新
*
3.使用:基本步驟----http://blog.csdn.net/lmj623565791/article/details/45059587
* 控制其顯示的方式,請通過布局管理器LayoutManager
mRecyclerView.setLayoutManager(layout);
抽象類,提供了三個實現類
* LinearLayoutManager 現行管理器,支持橫向、縱向。
* GridLayoutManager 網格布局管理器
分割:一般如果僅僅是希望有空隙,還是去設置item的margin方便
* StaggeredGridLayoutManager 瀑布就式布局管理器
* 控制Item間的間隔線(可繪制),請通過ItemDecoration
android:divider="#ffff0000",android:dividerHeight="10dp"
* 發現沒有分割線,RecyclerView并沒有支持divider這樣的屬性
mRecyclerView.addItemDecoration(new DividerItemDecoration(
getActivity(), DividerItemDecoration.HORIZONTAL));//默認的偏黑色分割線
RecyclerView.ItemDecoration解釋:該類為抽象類
* onDraw方法先于drawChildren
* onDrawOver在drawChildren之后,一般我們選擇復寫其中一個即可。
* getItemOffsets 可以通過outRect.set()為每個Item設置一定的偏移量,主要用于繪制Decorator
DividerItemDecoration
* private static final int[] ATTRS = new int[]{ android.R.attr.listDivider };通過讀取系統主題中的 android.R.attr.listDivider作為Item間的分割線
* 獲取到listDivider以后,該屬性的值是個Drawable(mDivider = a.getDrawable(0);),
* 在getItemOffsets中,outRect去設置了繪制的范圍。onDraw中實現了真正的繪制
*
* 自定義分割線
.setDrawable(getResources().getDrawable(R.mipmap.ic_launcher));通過這個方法可以使用一張圖片作為分割線...就可以使用shape進行繪制了
* 還可以在主題線面設置listDivider屬性值
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:listDivider">@drawable/divider_bg</item>
</style>
* 控制Item增刪的動畫,請通過ItemAnimator
mRecyclerView.setItemAnimator(new DefaultItemAnimator());//設置默認添加或者刪除的動畫效果
* 這里更新數據集不是用adapter.notifyDataSetChanged()而是 notifyItemInserted(position)與notifyItemRemoved(position),否則沒有動畫效果
* 只提供了一種動畫,那么我們肯定可以去自定義各種nice的動畫效果
https://github.com/gabrielemariotti/RecyclerViewItemAnimators
* 控制點擊、長按事件,請自己寫
通過adapter中自己去提供回調
* mAdapter.setOnItemClickLitener(new OnItemClickLitener()
public void onItemClick(View view, int position)
public void onItemLongClick(View view, int position)
* OnItemClickLitener接口里面的兩個方法
為什么使用這么多步驟?
* 從它類名上看,RecyclerView代表的意義是,我只管Recycler View,也就是說RecyclerView只管回收與復用View,其他的你可以自己去設置。可以看出其高度的解耦,給予你充分的定制自由(所以你才可以輕松的通過這個控件實現ListView,GirdView,瀑布流等效果)
- 班規
- 第一單元 Git
- 1.1 Git簡介
- 1.2 Git安裝
- 1.3 版本控制
- 1.4 遠程倉庫
- 1.5 分支管理
- 1.6 Git命令總結
- 1.7 在Android Studio中使用Git
- 第一單元 作業
- 第二單元 項目立項
- 2.1 需求文檔
- 2.2 原型圖
- 2.3 接口文檔
- 2.4 項目實現
- 2.5 制定開發計劃
- 第二單元 作業
- 第三單元 MVP搭建項目框架
- 3.1 代碼架構模式
- 3.2 普通方式寫代碼
- 3.3 使用MVC重構代碼
- 3.4 使用MVP重構代碼
- 3.5 使用接口提高代碼通用性
- 3.6 內存泄漏
- 3.7 使用契約統一管理接口
- 第三單元 作業
- 第四單元 MVP架構優化
- 4.1 MVP基類封裝與泛型應用
- 4.3 BaseActivity的封裝
- 第五單元 Volley網絡框架
- 5.1 Volley網絡框架
- 第六單元 Glide實現圖片異步加載
- 6.1 開始使用
- 6.2 占位符
- 6.3 Glide緩存
- 6.4 GlideGifVideo與色彩模式
- 第七單元 傳統屏幕適配
- 7.1 相對布局
- 7.1 權重
- 7.3 .9Patch
- 7.4 dimens適配
- 7.5 國際化
- 7.6 shape實現自定義樣式
- 7.7 自定義樣式
- 7.8 沉浸式狀態欄
- 第八單元 RecyclerView
- 8.1 RecycleView
- 第九單元 自定義View
- 第十單元 自定義View實戰
- 第十一單元 自定義View進階
- 第二十單元 屬性動畫
- 第十三單元 異常捕獲機制
- 第十四單元 原生登錄、注冊模塊
- 第十五單元 第三方登錄、分享、統計
- 第十六單元 HTML5新特性
- 第十七單元 CSS3新特性
- 第十八單元 WebView與JS交互
- 第一周周考
- 第二周周考
- 第三周周考
- 月考