-
Notifications
You must be signed in to change notification settings - Fork 528
帮助文档
一旦你将WheelPicker集成到你的项目中,你就可以像普通控件那样使用它:
在xml文件中引用
<com.aigestudio.wheelpicker.view.WheelCurvedPicker
android:layout_width="match_parent"
android:layout_height="wrap_content" />
在Java类文件中构造
WheelCurvedPicker wheelCurvedPicker = new WheelCurvedPicker(this);
layout.addView(wheelCurvedPicker);
默认情况下WheelPicker会显示一个默认数据:
如果你想设置自己的数据只需调用
void setData(List<String> data);
方法传入一个以String类型为泛型的列表即可
List<String> data = new ArrayList<>();
for (int i = 1900; i <= 2100; i++) {
data.add(String.valueOf(i));
}
wheelCurvedPicker.setData(data);
效果如下:
与此同时你可以通过WheelPicker提供的一系列方法来调整WheelPicker的外观,比如当前显示的Item在List数据集中的下标、每个Item间的间距、以及当前Item项文本显示的颜色等等,具体的这些方法使用说明可以参考IWheelPicker.java
与大多数滚动类控件一样,WheelPicker也需要通过
void setOnWheelChangeListener(AbstractWheelPicker.OnWheelChangeListener listener);
方法来设置监听器监听滚动状态以及数据的改变,该方法的入参类型如下:
public interface OnWheelChangeListener {
void onWheelScrolling(float deltaX, float deltaY);
void onWheelSelected(int index, String data);
void onWheelScrollStateChanged(int state);
}
onWheelScrolling(float deltaX, float deltaY)
该方法会在WheelPicker处于非静止状态时回调,其中参数deltaX和deltaY表示当前位置相对于初始位置的变化值,如果控件初次被构造显示,那么这两个值均会返回0,同时需要注意的是该值有正负之分,正值表明当前WheelPicker正向上/左滚动,负值表明当前WheelPicker正向下/右滚动。大部分情况下,你不会对该方法感兴趣。
onWheelSelected(int index, String data)
如果你想获取WheelPicker滚动停止后显示在当前Item上的数据,那么该方法会是你获取该数据的唯一途径。当WheelPicker滚动停止后会回调该方法并将当前Item所处于列表的下标以及数据传给入参。
onWheelScrollStateChanged(int state)
默认情况下WheelPicker会在三种不同的状态(滚动中、拖拽中、闲置中)之间不断切换,当你用手指拖动WheelPicker之后其会置于拖拽状态,松开后WheelPicker会矫正自己的位置以便数据显示正常,此时其会置于滚动状态,矫正完毕后WheelPicker又会回到闲置状态。
如果你想在WheelPicker滚动后通过点击Button之类的控件获取滚动后的数据,一个比较好的实现方式是通过onWheelSelected配合onWheelScrollStateChanged方法来实现:
wheelCurvedPicker.setOnWheelChangeListener(new AbstractWheelPicker.SimpleWheelChangeListener() {
@Override
public void onWheelScrollStateChanged(int state) {
if (state != AbstractWheelPicker.SCROLL_STATE_IDLE) {
btnObtainCurved.setEnabled(false);
} else {
btnObtainCurved.setEnabled(true);
}
}
@Override
public void onWheelSelected(int index, String data) {
dataCurved = data;
}
});
WheelPicker支持在当前Item项的区域上绘制装饰物,你可以通过
void setWheelDecor(boolean ignorePadding, AbstractWheelDecor decor);
方法来设置装饰物对象。比如你想要在当前的Item项区域上绘制一个填充的矩形:
WheelCrossPicker curvedPicker = (WheelCrossPicker) findViewById(R.id.main_wheel_curved);
curvedPicker.setWheelDecor(true, new AbstractWheelDecor() {
@Override
public void drawDecor(Canvas canvas, Rect rectLast, Rect rectNext, Paint paint) {
canvas.drawColor(0x88895463);
}
});
效果如下:
ignorePadding参数的作用和其意思一样,是否忽略掉内边距,如果我们给WheelPicker设置一个内边距并将该值设置为false,那么填充的颜色区域将不包含内边距所在的区域:
AbstractWheelDecor类是一个抽象类,其中有且仅有一个方法drawDecor(Canvas canvas, Rect rectLast, Rect rectNext, Paint paint),该方法的头尾两个参数意义都很明确不再多说,中间的两个Rect参数,第一个rectLast表示的是左/上边距的区域大小,而第二个rectNext表示的则是右/下边距的区域大小。继续拿上面的例子来说,我们在左右边距的区域上绘制不同的颜色以作区分:
WheelCrossPicker curvedPicker = (WheelCrossPicker) findViewById(R.id.main_wheel_curved);
curvedPicker.setWheelDecor(true, new AbstractWheelDecor() {
@Override
public void drawDecor(Canvas canvas, Rect rectLast, Rect rectNext, Paint paint) {
paint.setColor(0xFF985315);
canvas.drawRect(rectLast, paint);
paint.setColor(0xFF369854);
canvas.drawRect(rectNext, paint);
}
});
效果如下:
关于WheelPicker更多的用法可以参考widget包下WheelPicker提供的各类控件的实现方式,这里不在多说。