a great functional custom WheelView with demo in dialog and bottomDialog,android 滚动选择控件,滚动选择器
=========
There are several attributes you can set:
| attr 属性 | description 描述 | 
|---|---|
| lineColor | divider line color 分割线颜色 | 
| itemVisibleNum | wheelview show item count 此wheelView显示item的个数 | 
| textColorOuter | unSelected Text color 未选中文本颜色 | 
| textSizeOuter | unSelected Text size 未选中文本字体大小 | 
| textColorCenter | selected Text color 选中文本颜色 | 
| textSizeCenter | selected Text size 选中文本字体大小 | 
| isLoop | isLoop or no 滚轮是否首尾相连 | 
| lineSpaceingDimens | item unit margin height 每个item单元格中文字距离上下的高度 | 
| wheelGravity | align direction:left;center;right 对齐方向:靠左对齐 居中 靠右对齐 | 
set WheelView items and init selected position
设置WheelView的数据和初始位置
set listener on WheelView that can get info when WheelView changed selected item.
对WheelView设置监听器,当WheelView 选中项改变时返回选中项的索引和值。
    <wheelview.WheelView
        android:id="@+id/wheel_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="50dp"
        android:layout_marginRight="50dp"
        app:textColorCenter="@android:color/holo_blue_dark"
        app:lineSpaceingDimens="15dp"
        app:itemVisibleNum="3"
        app:lineColor="@android:color/holo_blue_dark"
        app:textSizeCenter="20dp"
        app:textSizeOuter="16dp"
        app:isLoop="false"
        app:textColorOuter="@android:color/darker_gray"
        />WheelView wva = (WheelView) findViewById(R.id.wheel_view);
wva.setItems(Arrays.asList(PLANETS),1);//init selected position is 1 初始选中位置为1
wva.setOnItemSelectedListener(new WheelView.OnItemSelectedListener() {
	@Override
	public void onItemSelected(int selectedIndex, String item) {
		Log.d(TAG, "selectedIndex: " + selectedIndex + ", item: " + item);
	}
});View outerView = LayoutInflater.from(this).inflate(R.layout.dialog_content_view, null);
final WheelView wv = (WheelView) outerView.findViewById(R.id.wheel_view_wv);
wv.setItems(getNumbers(),0);//init selected position is 0 初始选中位置为0
wv.setOnItemSelectedListener(new WheelView.OnItemSelectedListener() {
	@Override
	public void onItemSelected(int selectedIndex, String item) {
		Log.d(TAG, "[Dialog]selectedIndex: " + selectedIndex + ", item: " + item);
	}
});
new AlertDialog.Builder(this)
		.setTitle("WheelView in Dialog")
		.setView(outerView)
		.setPositiveButton("OK", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(MainActivity.this,
						"selectedIndex: "+ wv.getSelectedPosition() +"  selectedItem: "+ wv.getSelectedItem(),
						Toast.LENGTH_SHORT).show();
			}
		})
		.show();View outerView1 = LayoutInflater.from(this).inflate(R.layout.dialog_select_date_time, null);
//日期滚轮
final WheelView wv1 = (WheelView) outerView1.findViewById(R.id.wv1);
//小时滚轮
final WheelView wv2 = (WheelView) outerView1.findViewById(R.id.wv2);
//分钟滚轮
final WheelView wv3 = (WheelView) outerView1.findViewById(R.id.wv3);
final TimeRange timeRange = getTimeRange();
wv1.setItems(Common.buildDays(timeRange),0);
wv2.setItems(Common.buildHourListStart(timeRange),0);
wv3.setItems(Common.buildMinuteListStart(timeRange),0);
//联动逻辑效果
wv1.setOnItemSelectedListener(new WheelView.OnItemSelectedListener() {
	@Override
	public void onItemSelected(int index,String item) {
		List hourStrList = Common.buildHoursByDay(wv1, timeRange);
		int newIndexHour = hourStrList.indexOf(wv2.getSelectedItem());
		wv2.setItems(hourStrList,newIndexHour);
		List minStrList = Common.buildMinutesByDayHour(wv1, wv2, timeRange);
		int newIndexMin = minStrList.indexOf(wv3.getSelectedItem());
		wv3.setItems(minStrList,newIndexMin);
	}
});
wv2.setOnItemSelectedListener(new WheelView.OnItemSelectedListener() {
	@Override
	public void onItemSelected(int index,String item) {
		List minStrList = Common.buildMinutesByDayHour(wv1, wv2, timeRange);
		int newIndexMin = minStrList.indexOf(wv3.getSelectedItem());
		wv3.setItems(minStrList,newIndexMin);
	}
});
TextView tv_ok = (TextView) outerView1.findViewById(R.id.tv_ok);
TextView tv_cancel = (TextView) outerView1.findViewById(R.id.tv_cancel);
//点击确定
tv_ok.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View arg0) {
		bottomDialog.dismiss();
		String selectDateTimeStrToShow;
		String mSelectDate = wv1.getSelectedItem();
		String mSelectHour = wv2.getSelectedItem();
		String mSelectMin = wv3.getSelectedItem();
		String time = mSelectHour + mSelectMin;
		time = Common.timeToStr(Common.dateTimeFromCustomStr( mSelectDate, time));
		selectDateTimeStrToShow = mSelectDate + "  " + time;
		Toast.makeText(MainActivity.this, "selectDateTime: "+selectDateTimeStrToShow, Toast.LENGTH_SHORT).show();
	}
});
//点击取消
tv_cancel.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View arg0) {
		bottomDialog.dismiss();
	}
});
//防止弹出两个窗口
if (bottomDialog !=null && bottomDialog.isShowing()) {
	return;
}
bottomDialog = new BottomDialog(this, R.style.ActionSheetDialogStyle);
//将布局设置给Dialog
bottomDialog.setContentView(outerView1);
bottomDialog.show();//显示对话框

