Skip to content

Commit 7a35fcd

Browse files
committed
solve issues gzu-liyujiang#72
1 parent 677aec4 commit 7a35fcd

3 files changed

Lines changed: 186 additions & 103 deletions

File tree

library/WheelPicker/src/main/java/cn/qqtheme/framework/picker/NumberPicker.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
* @author 李玉江[QQ:1032694760]
99
* @since 2015/10/24
1010
*/
11-
public class NumberPicker extends OptionPicker {
11+
public class NumberPicker extends SinglePicker<Number> {
1212

1313
public NumberPicker(Activity activity) {
14-
super(activity, new String[]{});
14+
super(activity, new Number[]{});
1515
}
1616

1717
/**
@@ -26,15 +26,39 @@ public void setRange(int startNumber, int endNumber) {
2626
*/
2727
public void setRange(int startNumber, int endNumber, int step) {
2828
for (int i = startNumber; i <= endNumber; i = i + step) {
29-
options.add(String.valueOf(i));
29+
items.add(i);
30+
}
31+
}
32+
33+
/**
34+
* 设置数字范围及递增量
35+
*/
36+
public void setRange(double startNumber, double endNumber, double step) {
37+
for (double i = startNumber; i <= endNumber; i = i + step) {
38+
items.add(i);
3039
}
3140
}
3241

3342
/**
3443
* 设置默认选中的数字
3544
*/
3645
public void setSelectedItem(int number) {
37-
setSelectedItem(String.valueOf(number));
46+
super.setSelectedItem(number);
47+
}
48+
49+
/**
50+
* 设置默认选中的数字
51+
*/
52+
public void setSelectedItem(double number) {
53+
super.setSelectedItem(number);
54+
}
55+
56+
public void setOnNumberPickListener(OnNumberPickListener listener) {
57+
super.setOnItemPickListener(listener);
58+
}
59+
60+
public interface OnNumberPickListener extends OnItemPickListener<Number> {
61+
3862
}
3963

4064
}

library/WheelPicker/src/main/java/cn/qqtheme/framework/picker/OptionPicker.java

Lines changed: 9 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,120 +1,30 @@
11
package cn.qqtheme.framework.picker;
22

33
import android.app.Activity;
4-
import android.support.annotation.NonNull;
5-
import android.text.TextUtils;
6-
import android.view.Gravity;
7-
import android.view.View;
8-
import android.widget.LinearLayout;
9-
import android.widget.TextView;
104

11-
import java.util.ArrayList;
12-
import java.util.Arrays;
13-
14-
import cn.qqtheme.framework.widget.WheelView;
5+
import java.util.List;
156

167
/**
17-
* 单项选择器
8+
* 单项文本选择器
189
*
1910
* @author 李玉江[QQ:1032694760]
2011
* @since 2015/9/29
2112
*/
22-
public class OptionPicker extends WheelPicker {
23-
protected ArrayList<String> options = new ArrayList<String>();
24-
private OnOptionPickListener onOptionPickListener;
25-
private int selectedOptionIndex = 0;
26-
private String label = "";
27-
28-
public OptionPicker(Activity activity, String[] options) {
29-
super(activity);
30-
this.options.addAll(Arrays.asList(options));
31-
}
32-
33-
public OptionPicker(Activity activity, ArrayList<String> options) {
34-
super(activity);
35-
this.options.addAll(options);
36-
}
37-
38-
/**
39-
* 设置显示的单位,如身高为cm、体重为kg
40-
*/
41-
public void setLabel(String label) {
42-
this.label = label;
43-
}
13+
public class OptionPicker extends SinglePicker<String> {
4414

45-
/**
46-
* 设置默认选中的项的索引
47-
*/
48-
public void setSelectedIndex(int index) {
49-
if (index >= 0 && index < options.size()) {
50-
selectedOptionIndex = index;
51-
}
15+
public OptionPicker(Activity activity, String[] items) {
16+
super(activity, items);
5217
}
5318

54-
/**
55-
* 设置默认选中的项
56-
*/
57-
public void setSelectedItem(String option) {
58-
setSelectedIndex(options.indexOf(option));
19+
public OptionPicker(Activity activity, List<String> items) {
20+
super(activity, items);
5921
}
6022

6123
public void setOnOptionPickListener(OnOptionPickListener listener) {
62-
this.onOptionPickListener = listener;
63-
}
64-
65-
@Override
66-
@NonNull
67-
protected View makeCenterView() {
68-
if (options.size() == 0) {
69-
throw new IllegalArgumentException("please initial options at first, can't be empty");
70-
}
71-
LinearLayout layout = new LinearLayout(activity);
72-
layout.setOrientation(LinearLayout.HORIZONTAL);
73-
layout.setGravity(Gravity.CENTER);
74-
WheelView optionView = new WheelView(activity);
75-
optionView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
76-
optionView.setTextSize(textSize);
77-
optionView.setTextColor(textColorNormal, textColorFocus);
78-
optionView.setLineVisible(lineVisible);
79-
optionView.setLineColor(lineColor);
80-
optionView.setOffset(offset);
81-
layout.addView(optionView);
82-
TextView labelView = new TextView(activity);
83-
labelView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
84-
labelView.setTextColor(textColorFocus);
85-
labelView.setTextSize(textSize);
86-
layout.addView(labelView);
87-
if (!TextUtils.isEmpty(label)) {
88-
labelView.setText(label);
89-
}
90-
optionView.setItems(options, selectedOptionIndex);
91-
optionView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
92-
@Override
93-
public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
94-
selectedOptionIndex = selectedIndex;
95-
}
96-
});
97-
return layout;
98-
}
99-
100-
@Override
101-
public void onSubmit() {
102-
if (onOptionPickListener != null) {
103-
onOptionPickListener.onOptionPicked(selectedOptionIndex, options.get(selectedOptionIndex));
104-
}
105-
}
106-
107-
public String getSelectedOption() {
108-
return options.get(selectedOptionIndex);
109-
}
110-
111-
public int getSelectedPosition() {
112-
return selectedOptionIndex;
24+
super.setOnItemPickListener(listener);
11325
}
11426

115-
public interface OnOptionPickListener {
116-
117-
void onOptionPicked(int position, String option);
27+
public interface OnOptionPickListener extends OnItemPickListener<String> {
11828

11929
}
12030

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
package cn.qqtheme.framework.picker;
2+
3+
import android.app.Activity;
4+
import android.support.annotation.NonNull;
5+
import android.text.TextUtils;
6+
import android.view.Gravity;
7+
import android.view.View;
8+
import android.widget.LinearLayout;
9+
import android.widget.TextView;
10+
11+
import java.util.ArrayList;
12+
import java.util.Arrays;
13+
import java.util.List;
14+
15+
import cn.qqtheme.framework.widget.WheelView;
16+
17+
/**
18+
* 单项选择器
19+
*
20+
* @author 李玉江[QQ:1032694760]
21+
* @since 2015/9/29
22+
*/
23+
public class SinglePicker<T> extends WheelPicker {
24+
protected ArrayList<T> items = new ArrayList<T>();
25+
private OnWheelListener onWheelListener;
26+
private OnItemPickListener<T> onItemPickListener;
27+
private int selectedItemIndex = 0;
28+
private String label = "";
29+
30+
public SinglePicker(Activity activity, T[] items) {
31+
this(activity, Arrays.asList(items));
32+
}
33+
34+
public SinglePicker(Activity activity, List<T> items) {
35+
super(activity);
36+
if (null == items || items.size() == 0) {
37+
return;
38+
}
39+
this.items.addAll(items);
40+
}
41+
42+
/**
43+
* 设置显示的单位,如身高为cm、体重为kg
44+
*/
45+
public void setLabel(String label) {
46+
this.label = label;
47+
}
48+
49+
/**
50+
* 设置默认选中的项的索引
51+
*/
52+
public void setSelectedIndex(int index) {
53+
if (index >= 0 && index < items.size()) {
54+
selectedItemIndex = index;
55+
}
56+
}
57+
58+
/**
59+
* 设置默认选中的项
60+
*/
61+
public void setSelectedItem(@NonNull T item) {
62+
setSelectedIndex(items.indexOf(item));
63+
}
64+
65+
/**
66+
* 设置滑动监听器
67+
*/
68+
public void setOnWheelListener(OnWheelListener onWheelListener) {
69+
this.onWheelListener = onWheelListener;
70+
}
71+
72+
public void setOnItemPickListener(OnItemPickListener<T> listener) {
73+
this.onItemPickListener = listener;
74+
}
75+
76+
@Override
77+
@NonNull
78+
protected View makeCenterView() {
79+
if (items.size() == 0) {
80+
throw new IllegalArgumentException("please initial items at first, can't be empty");
81+
}
82+
LinearLayout layout = new LinearLayout(activity);
83+
layout.setOrientation(LinearLayout.HORIZONTAL);
84+
layout.setGravity(Gravity.CENTER);
85+
WheelView optionView = new WheelView(activity);
86+
optionView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
87+
optionView.setTextSize(textSize);
88+
optionView.setTextColor(textColorNormal, textColorFocus);
89+
optionView.setLineVisible(lineVisible);
90+
optionView.setLineColor(lineColor);
91+
optionView.setOffset(offset);
92+
layout.addView(optionView);
93+
TextView labelView = new TextView(activity);
94+
labelView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
95+
labelView.setTextColor(textColorFocus);
96+
labelView.setTextSize(textSize);
97+
layout.addView(labelView);
98+
if (!TextUtils.isEmpty(label)) {
99+
labelView.setText(label);
100+
}
101+
optionView.setItems(getStringList(), selectedItemIndex);
102+
optionView.setOnWheelListener(new WheelView.OnWheelListener() {
103+
@Override
104+
public void onSelected(boolean isUserScroll, int index, String item) {
105+
selectedItemIndex = index;
106+
if (onWheelListener != null) {
107+
onWheelListener.onWheeled(selectedItemIndex, item);
108+
}
109+
}
110+
});
111+
return layout;
112+
}
113+
114+
private List<String> getStringList() {
115+
List<String> stringList = new ArrayList<String>();
116+
for (T item : items) {
117+
stringList.add(item.toString());
118+
}
119+
return stringList;
120+
}
121+
122+
@Override
123+
public void onSubmit() {
124+
if (onItemPickListener != null) {
125+
onItemPickListener.onItemPicked(selectedItemIndex, getSelectedItem());
126+
}
127+
}
128+
129+
public T getSelectedItem() {
130+
return items.get(selectedItemIndex);
131+
}
132+
133+
public int getSelectedIndex() {
134+
return selectedItemIndex;
135+
}
136+
137+
public interface OnItemPickListener<T> {
138+
139+
void onItemPicked(int index, T item);
140+
141+
}
142+
143+
public interface OnWheelListener {
144+
145+
void onWheeled(int index, String item);
146+
147+
}
148+
149+
}

0 commit comments

Comments
 (0)