android 100行代码实现 仿苹果滑动选择器WheelView
16lz
2021-01-23
效果
源码
public class WheelView extends ListView { private List datas = new ArrayList(); private BaseAdapter adapter; public WheelView(Context context, AttributeSet attrs) { super(context, attrs); for (int i = 0; i < 18; i++) { datas.add(i); } adapter = new BaseAdapter() { public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(getContext(), R.layout.item_num, null); } int index = position % (datas.size() / 2); int data = datas.get(index); TextView num = (TextView) convertView.findViewById(R.id.num); num.setText(String.valueOf(data)); num.setTextColor(Color.BLACK); if ((getSelectionPosition() % datas.size() + 1) % datas.size() == position % datas.size()) { num.setTextColor(Color.RED); } return convertView; } @Override public long getItemId(int position) { return position; } @Override public Object getItem(int position) { return null; } @Override public int getCount() { return Integer.MAX_VALUE; } }; setAdapter(adapter); setOnScrollListener(new OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { adapter.notifyDataSetChanged(); setSelection(9 + getSelectionPosition() % (datas.size() / 2)); } } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); setSelection(datas.size() / 2); } int getSelectionPosition() { int ret = 0; if (getChildCount() > 0) { int h = getChildAt(0).getMeasuredHeight(); Rect r = new Rect(); getChildAt(0).getLocalVisibleRect(r); if (r.height() > h / 2) { ret = getFirstVisiblePosition(); } else { ret = getFirstVisiblePosition() + 1; } } return ret; }}
更多相关文章
- Android 使用git下载源码报错解决方法
- android binder机制及其源码解析之第二节 重要函数讲解之常用数
- android源码分享之时光日志个人日程管理
- android 浏览普通彩信列表核心源码
- Android在WebView中获取网页源码
- android EditText 设置密码锁源码
- Android 9.0 System.loadLibrary 的源码解析
- Android Sync 同步 源码问题解决方案
- android AsyncTask 源码跟踪