RecyclerView+SnapHelper實現(xiàn)無限循環(huán)篩選控件
項目用到橫向滑動的單項選擇控件。需求如下:
1.選項由后臺配置,也就是控件要動態(tài)設(shè)置寬度;2.每次滑動都要左對齊,并默認選中最左邊選項;3.控件可以無限循環(huán)。
動態(tài)設(shè)置控件寬度:獲取adapter的item寬度;獲取adapter里裝載的itemCount。
每次滑動都要左對齊:利用LinearSnapHelper中calculateDistanceToFinalSnap的方法實現(xiàn);
默認選中最左item:利用RecycleView的LayoutManager中查找顯示第一項的方法linearManager.findFirstVisibleItemPosition()來實現(xiàn)。
控件無限循環(huán):將父類adapter的itemCount設(shè)置為Integer.MAX_VALUE。
效果圖:
核心代碼:
FilterWheelView.java
private void initData(){ if (filterItemEntity != null) { if (!TextUtils.isEmpty(filterItemEntity.getTitle())) { filtrationType.setText(filterItemEntity.getTitle()); } if (filterItemEntity.getOptions() != null) { mAdapter = new ADA_FilterWheel(mContext, filterItemEntity.getOptions()); } mLoopRecyclerView.setAdapter(mAdapter); if (adaItemCallback!=null){ adaItemCallback.sendItems(mAdapter.getItemRawCount()); } //設(shè)置滾動監(jiān)聽 mLoopRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); //滾動停止時,獲取recycler顯示的第一項的position if (newState == RecyclerView.SCROLL_STATE_IDLE) { int items = mAdapter.getItemRawCount(); int firstItemPosition =linearManager.findFirstVisibleItemPosition(); //高亮顯示最左邊的item mAdapter.highlightItem(firstItemPosition % items); } //滾動過程中,釋放選中狀態(tài) if (newState == RecyclerView.SCROLL_STATE_DRAGGING) { mAdapter.reset(); } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); } }); //找到當前選中的實體 for (int i = 0; i < filterItemEntity.getOptions().size(); i++) { FilterOptionsEntity bean = filterItemEntity.getOptions().get(i); if (bean.isCheck()) { // 當前選中實體類 currentBean = bean; break; } } } }
demo:下載地址
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 實現(xiàn)ListView的點擊變色的實例
這篇文章主要介紹了Android 實現(xiàn)ListView的點擊變色的實例的相關(guān)資料,主要實現(xiàn)Android listveiw ItemClickListener寫入變色的功能,需要的朋友可以參考下2017-07-07Android EditText實現(xiàn)分割輸入內(nèi)容
這篇文章主要為大家詳細介紹了Android EditText實現(xiàn)分割輸入內(nèi)容的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04monkeyrunner之安卓開發(fā)環(huán)境搭建教程(1)
這篇文章主要介紹了monkeyrunner之安卓開發(fā)環(huán)境搭建教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11Android簡單創(chuàng)建一個Activity的方法
這篇文章主要介紹了Android簡單創(chuàng)建一個Activity的方法,結(jié)合圖文形式分析了Android創(chuàng)建Activity的具體步驟與實現(xiàn)技巧,需要的朋友可以參考下2016-04-04Assert.assertEquals()方法參數(shù)詳解
本文詳細講解了Assert.assertEquals()方法參數(shù),文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12Android基于AudioManager、PhoneStateListener實現(xiàn)設(shè)置黑名單功能
這篇文章主要介紹了Android基于AudioManager、PhoneStateListener實現(xiàn)設(shè)置黑名單功能的方法,涉及Android操作手機通信錄及通話模式與手機狀態(tài)的相關(guān)技巧,需要的朋友可以參考下2016-01-01