Skip to content
Aige edited this page Jul 8, 2016 · 3 revisions

一旦你将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提供的各类控件的实现方式,这里不在多说。

Clone this wiki locally