Android 時間軸的實現(RecyclerView更簡單)
之前實現時間軸的方式,總體來說就是透過ListView的方式。看到網友評論說到RecycleView,就嘗試了一下,結果發現用RecycleView實現時間更加高效和簡單,尤其是在實現橫向時間軸的時候。
RecycleView 是什麼?
在百度上搜尋RecycleView,很多文章的介紹都是以這樣開頭的。透過RecycleView的API可以發現,RecycleView的確比ListView靈活了許多,透過設定它提供的不同LayoutManager,ItemDecoration , ItemAnimator可以實現很拉風的檢視效果和使用者操作體驗。(下面你馬上就可以體驗到)
縱向時間軸
縱向時間軸的實現,類似於使用ListView實現,只是其Adapter和ListView的Adapter實現方式有所不同,但整體思路是一樣的。
Adapter 實現
public class MyRecyclerAdapter extends RecyclerView.Adapter{ List lists; Context mContext; public MyRecyclerAdapter(List lists, Context mContext) { super(); this.lists = lists; this.mContext = mContext; } /* * 覆蓋方法 */ @Override public int getItemCount() { // TODO 自動生成的方法存根 return lists.size(); } /* * 覆蓋方法 */ @Override public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) { // TODO 自動生成的方法存根 LayoutInflater inflater = LayoutInflater.from(mContext); View view = inflater.inflate(R.layout.item_view, arg0, false); MyViewHolder holder = new MyViewHolder(view); return holder; } class MyViewHolder extends ViewHolder { TextView title,time; View line; /** * @param itemView */ public MyViewHolder(View itemView) { super(itemView); // TODO 自動生成的建構函式存根 title = (TextView) itemView.findViewById(R.id.show_title); time= (TextView) itemView.findViewById(R.id.show_time); line = itemView.findViewById(R.id.line_normal); } } /* * 覆蓋方法 */ @Override public void onBindViewHolder(MyViewHolder arg0, int arg1) { // TODO 自動生成的方法存根 arg0.title.setText(lists.get(arg1).getTitle()); arg0.time.setText(lists.get(arg1).getTime()); //最後一項時,豎線不再顯示 if (arg1 == lists.size() - 1) { arg0.line.setVisibility(View.GONE); } } }
**
效果如圖
橫向時間軸
在實現橫向的時間軸時,就體現出了RecycleView的優勢來。
在之前的文章中提到,普通的ListView此時需要自定義實現橫向的ListView。但是對RecycleView來說,變成橫向佈局,簡直太容易了。程式碼如下:
設定RecycleView為橫向
recycview=(RecyclerView) findViewById(R.id.recyclerview); adapter=new MyRecyclerAdapter2(datas,mContext); //設定佈局管理器 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); recycview.setLayoutManager(linearLayoutManager); recycview.setAdapter(adapter);
看看,RecycleView就是這麼任性,只需要在設定佈局管理器時制定方向為HORIZONTAL,那麼整個View就會在水平方向做延伸,很容易的就實現了一個橫向的列表。
Adapter
public class MyRecyclerAdapter2 extends RecyclerView.Adapter{ List lists; Context mContext; public MyRecyclerAdapter2(List lists, Context mContext) { super(); this.lists = lists; this.mContext = mContext; } /* * 覆蓋方法 */ @Override public int getItemCount() { // TODO 自動生成的方法存根 return lists.size(); } /* * 覆蓋方法 */ @Override public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) { // TODO 自動生成的方法存根 LayoutInflater inflater = LayoutInflater.from(mContext); View view = inflater.inflate(R.layout.item_view2, arg0, false); MyViewHolder holder = new MyViewHolder(view); return holder; } class MyViewHolder extends ViewHolder { TextView title,time; View lineNorma, lineHiLight; ImageView image; /** * @param itemView */ public MyViewHolder(View itemView) { super(itemView); // TODO 自動生成的建構函式存根 title = (TextView) itemView.findViewById(R.id.show_title); time= (TextView) itemView.findViewById(R.id.show_time); lineNorma = itemView.findViewById(R.id.line_normal); lineHiLight = itemView.findViewById(R.id.line_highlight); image = (ImageView) itemView.findViewById(R.id.image); } } /* * 覆蓋方法 */ @Override public void onBindViewHolder(MyViewHolder item, int position) { // TODO 自動生成的方法存根 item.title.setText(lists.get(position).getTitle()); item.time.setText(lists.get(position).getTime()); //最後一項時,豎線不再顯示 if (position == 0) { item.lineNorma.setVisibility(View.INVISIBLE); item.lineHiLight.setVisibility(View.INVISIBLE); item.time.setVisibility(View.VISIBLE); }else { if (lists.get(position).getStatu() == 1) { item.lineHiLight.setVisibility(View.VISIBLE); item.image.setImageResource(R.drawable.point1); item.time.setVisibility(View.VISIBLE); } } } }
這裡同樣需要注意,item_view2佈局檔案最外層的View的寬度需設定為wrap_content。
效果圖
好了,這就是用RecycleView實現橫豎兩種時間軸的方式。
可以看到RecycleView的確很靈活。當然了,這裡提到的只是冰山一角,Google官方提出用其替代ListView及GridView,在效能方面必然也有它的優勢,所以以後開發需羅列大量資料時可以考慮使用RecycleView。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2041/viewspace-2812398/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 時間軸的實現(簡單到爆炸)
- RecyclerView 列表控制元件中簡單實現時間線View控制元件
- Android 自定義 View 實現橫行時間軸AndroidView
- Android自定義View:快遞時間軸實現AndroidView
- 前端css實現最基本的時間軸前端CSS
- Android 自定義View實戰系列 :時間軸AndroidView
- RecycleView自定義ItemDecoration,實現時間軸效果View
- 時間軸、流程類時間軸繪製
- HTML+CSS實現時間軸(移動端)HTMLCSS
- 時間軸
- Android 具有左右滑動功能的時間軸Android
- Flutter 中通過 Container 實現時間軸效果FlutterAI
- RecyclerView的簡單使用View
- 一個簡單的時間視窗設計與實現
- JS時間軸效果(類似於qq空間時間軸效果)JS
- HTML5+CSS3實現的響應式垂直時間軸HTMLCSSS3
- 讓動畫實現更簡單,Flutter 動畫簡易教程!動畫Flutter
- 簡單實現時間倒數計時與伺服器同步效果伺服器
- Android RecyclerView 通用介面卡的實現AndroidView
- android RecyclerView佈局真的只是那麼簡單!AndroidView
- Android中SharePreferences的簡單實現Android
- 簡單介紹Android自定義View實現時鐘功能AndroidView
- 利用JQuery實現更簡單的Ajax跨域請求jQuery跨域
- Android RecyclerView的簡便寫法AndroidView
- 延時 (遲) 操作的 PHP 簡單實現PHP
- Android 基於RecyclerView實現批量操作AndroidView
- Android使用RecyclerView實現二級列表AndroidView
- iojs的jsdom庫實現同步系統時間簡單程式碼JS
- 用flutter很簡單的實現一個時光軸樣式【flutter20個例項之五】Flutter
- Android應用加固的簡單實現方案Android
- 更簡單的學習Android事件分發Android事件
- 如何設計一個好玩的競技遊戲——結構時間軸與戰鬥時間軸遊戲
- Android實現帶動畫的下拉重新整理RecyclerViewAndroid動畫View
- 時間軸元件 by Vue.js元件Vue.js
- CSS3時間軸效果CSSS3
- 時間軸/里程碑模式模式
- Android實現RecyclerView巢狀流式佈局AndroidView巢狀
- Android 輕鬆實現 RecyclerView 懸浮條AndroidView