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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android自定義View:快遞時間軸實現AndroidView
- Android 自定義 View 實現橫行時間軸AndroidView
- 前端css實現最基本的時間軸前端CSS
- 時間軸、流程類時間軸繪製
- HTML+CSS實現時間軸(移動端)HTMLCSS
- Flutter 中通過 Container 實現時間軸效果FlutterAI
- Android中SharePreferences的簡單實現Android
- RecyclerView的簡單使用View
- 時間軸
- 一個簡單的時間視窗設計與實現
- 簡單介紹Android自定義View實現時鐘功能AndroidView
- Android應用加固的簡單實現方案Android
- Android實現RecyclerView巢狀流式佈局AndroidView巢狀
- Android應用加固的簡單實現方案(二)Android
- 說說在 Android 的 RecyclerView 中如何實現下拉刷AndroidView
- [轉]Android輕鬆實現RecyclerView懸浮條AndroidView
- 延時 (遲) 操作的 PHP 簡單實現PHP
- 用flutter很簡單的實現一個時光軸樣式【flutter20個例項之五】Flutter
- Android實現錄屏直播(一)ScreenRecorder的簡單分析Android
- 讓動畫實現更簡單,Flutter 動畫簡易教程!動畫Flutter
- android 簡單實現指紋識別功能Android
- Android RecyclerView實現頭部懸浮吸頂效果AndroidView
- ListView 與 RecyclerView 簡單對比View
- Android中的RecyclerViewAndroidView
- 基於Netty的Android系統IM簡單實現原理NettyAndroid
- 時間軸元件 by Vue.js元件Vue.js
- Flutter自定義時間軸timelineFlutter
- 如何設計一個好玩的競技遊戲——結構時間軸與戰鬥時間軸遊戲
- AOP的簡單實現
- 簡單的 HashMap 實現HashMap
- 實現簡單的BitMap
- ArrayList的簡單實現
- 4種更快更簡單實現Python資料視覺化的方法Python視覺化
- 簡單程式的時間複雜度分析時間複雜度
- 一鍵執行實時的修改,讓Qt遠端除錯更簡單QT除錯
- 資料分析的三大時間軸:過去、現在和未來
- Android入門教程 | RecyclerView實際使用AndroidView
- 直播系統搭建,簡單實現Android應用的啟動頁Android