前言
一款自定义的WheelPicker控件,它的实现基于Android原生NumberPicker,有占用内存小,滚动灵敏的优点。不同于默认风格NumberPicker的是,这款NumberPicker支持用户通过设置Adapter的方式来实现各种不同的需求,比如循环显示周一至周日,日期选择等。
Github Link:
控件截图
控件说明
WheelPicker的特性:
1.支持自定义字体,文字颜色,文字大小,文字对齐方式。
2.支持设置可见选项个数。
3.支持负数。
4.支持无限滚动,循环滚动。
5.支持用户设置Adapter以满足不同的需求,如:文字选择,时间选择,日期选择等。
6.支持设置摩擦值以改变滑动速度。
7.提供更好的动画效果,支持选中项放大,支持仿IOS的OverScrolling等。
8.兼容NumberPicker的重要方法和接口。
使用方法
1.Gradle:
compile 'com.super_rabbit.wheel_picker:NumberPicker:1.0.1'复制代码
2.自定义属性
attribute name | attribute description |
---|---|
fadingEdgeEnabled | enable/disable the fading edge attribute. |
max | The max index(value) of the picker, can be negative, default is Integer.MAX_VALUE. |
min | The minimum index(value) of the picker, can be negative, default is Integer.MIN_VALUE |
selectedTextColor | The text color of selected item. |
textColor | The text color of unselected item. |
textSize | Text size. |
typeface | Text font typeface. |
wheelItemCount | The visible item count of the picker. |
wrapSelectorWheel | true if the picker is rounded wrapped, default is false. |
align | The text alignment, can be LEFT, CENTER, RIGHT. |
3.接口文档
function name | function description |
---|---|
String getValue(position: Int) | return the current value of the picker. |
void setValue(value: String) | set the current value of the picker. |
void setWrapSelectorWheel(wrap: Boolean) | Sets whether the selector wheel shown during flinging/scrolling should wrap around the min and max values. |
Boolean getWrapSelectorWheel() | Gets whether the selector wheel wraps when reaching the min/max value. |
void setWheelItemCount(count: Int) | Set how many visible item show in the picker. |
void setSelectedTextColor(colorId: Int) | Set color for current selected item. |
void setUnselectedTextColor(colorId: Int) | Set color for unselected item. |
scrollTo(position: Int) | Scroll to a specific position, without animation. |
smoothScrollTo(position: Int) | Scroll to a specific position, with animation. |
scrollToValue(value: String) | Scroll to a specific value, without animation. |
smoothScrollToValue(value: String) | Scroll to a specific value, with animation. |
setOnValueChangedListener(onValueChangeListener: OnValueChangeListener) | Set listener listening value change. |
setAdapter(adapter: WheelAdapter?, indexRangeBasedOnAdapterSize: Boolean = true) | Set user define adapter, @indexRangeBasedOnAdapterSize specific if the picker's min~max range is based on adapter's size |
4.代码举例
以下代码使用WheelPicker实现了一个简单的日期选择控件:
// Set rounded wrap enablenumberPicker.setSelectorRoundedWrapPreferred(true)// Set wheel item countnumberPicker.setWheelItemCount(5)// Set wheel max indexnumberPicker.setMax(1000)// Set wheel min indexnumberPicker.setMax(1000)// Set selected text colornumberPicker.setSelectedTextColor(R.color.color_4_blue)// Set unselected text colornumberPicker.setUnselectedTextColor(R.color.color_3_dark_blue)// Set user defined adapternumberPicker.setAdapter(WPDayPickerAdapter())// OnValueChangeListenerval context = thisnumberPicker.setOnValueChangeListener(object : OnValueChangeListener{ override fun onValueChange(picker: WheelPicker, oldVal: String, newVal: String) { val out = String.format("Current: %s", newVal) Toast.makeText(context, out, Toast.LENGTH_SHORT).show() }})// Adapter sample /** * Custom wheel picker adapter for implementing a date picker */class WPDayPickerAdapter : WheelAdapter { //get item value based on item position in wheel override fun getValue(position: Int): String { if (position == 0) return "Today" if(position == -1) return "Yesterday" if (position == 1) return "Tomorrow" val curDate = Date(System.currentTimeMillis()) val rightNow = Calendar.getInstance() rightNow.time = curDate; rightNow.add(Calendar.DATE, position) val simpleDateFormat = SimpleDateFormat("MMM d, yyyy") return simpleDateFormat.format(rightNow.time) } //get item position based on item string value override fun getPosition(vale: String): Int { return 0 } //return a string with the approximate longest text width, for supporting WRAP_CONTENT override fun getTextWithMaximumLength(): String { return "Mmm 00, 0000" } //return the maximum index override fun getMaxIndex(): Int { return Integer.MAX_VALUE } //return the minimum index override fun getMinIndex(): Int { return Integer.MIN_VALUE }}复制代码
总结
WheelPicker实现基于原生Android NumberPicker, 除了实现NumberPicker的标准方法外,还提供了更多自定义的属性,项目中如要替换,仅需要将NumberPicker替换成WheelPicker即可。
总之:给个Star吧?
Github Link: