Demo地址 https://github.com/wdzawdh/WheelDialog
setLabels方法用来设置选项。
WheelDialog wheelDialog = new WheelDialog(this); wheelDialog.setLabels(list); wheelDialog.setOnWheelSelectListener( new WheelDialog.OnWheelSelectListener() { @Override public void onClickOk(int index, String selectLabel) { Toast.makeText(getApplicationContext(), selectLabel , Toast.LENGTH_SHORT).show(); } }); wheelDialog.show();使用ListView实现要克服几个问题。 1.不管怎么滑动,最终item都要两条线之间。 2.要保证所有item都能滚动到两线之间。
WheelListView.WHEEL_SIZE是滚轮展示的item数,默认是5。 前后添加各添加两个辅助的item来保证所有item都能滚动到两线之间。
class WheelAdapter extends BaseAdapter { private List<String> mData = new ArrayList<>(); ... @Override public int getCount() { //这里多加了4个辅助的item是为了前后的item都能滚动到两线之间。 return mData.size() + WheelListView.WHEEL_SIZE - 1; } @Override public String getItem(int position) { return mData.get(position - WheelListView.WHEEL_SIZE / 2); } ... @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.widget_wheel_item, null); } TextView textView = (TextView) convertView .findViewById(R.id.tv_label_item_wheel); int start = WheelListView.WHEEL_SIZE / 2; int end = mData.size() + WheelListView.WHEEL_SIZE / 2 - 1; if (position < start || position > end) { //范围外的是辅助的item,不显示 convertView.setVisibility(View.INVISIBLE); } else { textView.setText(getItem(position)); convertView.setVisibility(View.VISIBLE); } return convertView; } }