Skip to content

Commit ef8d89c

Browse files
committed
添加车牌号码选择器
1 parent 274f474 commit ef8d89c

11 files changed

Lines changed: 323 additions & 40 deletions

File tree

ChangeLog.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
### v1.3.2 - 2016.12.18
1+
### v1.3.1 - 2016.12.18
22
支持设置选中项分割线的宽比例、透明度、粗度;
33
修复小数选择器设置默认选择项可能无效的bug;
44
### v1.3.0 - 2016.12.15

README.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
[![JitPack](https://jitpack.io/v/gzu-liyujiang/AndroidPicker.svg)](https://jitpack.io/#gzu-liyujiang/AndroidPicker)
55
[![Build Status](https://travis-ci.org/gzu-liyujiang/AndroidPicker.svg?branch=master)](https://travis-ci.org/gzu-liyujiang/AndroidPicker)
66

7-
安卓选择器类库,包括日期选择器、时间选择器、单项选择器、城市选择器、颜色选择器、文件选择器、目录选择器、数字选择器、星座选择器、生肖选择器等,可自定义顶部及底部界面,可自定义窗口动画
7+
安卓选择器类库,包括日期选择器、时间选择器、单项选择器、城市地址选择器、车牌号选择器、数字选择器、星座选择器、生肖选择器、颜色选择器、文件选择器、目录选择器等,可自定义顶部及底部界面,可自定义窗口动画……
88
欢迎大伙儿在[Issues](https://github.com/gzu-liyujiang/AndroidPicker/issues)提交你的意见或建议。
99
欢迎Fork & Pull requests贡献您的代码,大家共同学习【[AndroidPicker交流群 604235437](https://jq.qq.com/?_wv=1027&k=42bKOeD)】。
1010
[查看更新日志](https://github.com/gzu-liyujiang/AndroidPicker/blob/master/ChangeLog.md)**新版本未对旧版API作兼容处理,升级后若编译报错请根据错误提示更改**
1111

1212
# Install
1313
“app”是测试用例;“library”包括WheelPicker、ColorPicker、FilePicker,
14-
WheelPicker包括DatePicker、TimePicker、OptionPicker、LinkagePicker、AddressPicker、NumberPicker等
14+
WheelPicker包括DatePicker、TimePicker、OptionPicker、LinkagePicker、AddressPicker、NumberPicker、CarNumberPicker等
1515
#### ~~懒人建议直接远程加载jcenter里的~~
1616
WheelPicker、FilePicker及ColorPicker是独立的,需要用哪个就compile哪个。
1717
latest.release表示使用最新版,也可以[参照此处指定具体的版本号](https://github.com/gzu-liyujiang/AndroidPicker/releases)
@@ -115,16 +115,18 @@ dependencies {
115115
```
116116
选择器内嵌到其他视图容器:
117117
```java
118-
final TimePicker picker = new TimePicker(this, TimePicker.HOUR_12);
119-
picker.setOnWheelListener(new TimePicker.OnWheelListener() {
118+
final CarNumberPicker picker = new CarNumberPicker(this);
119+
picker.setWidth(picker.getScreenWidthPixels() / 2);
120+
picker.setLineConfig(new WheelView.LineConfig(0));//使用最长的分割线
121+
picker.setOnWheelListener(new CarNumberPicker.OnWheelListener() {
120122
@Override
121-
public void onHourWheeled(int index, String hour) {
122-
textView.setText(hour + ":" + picker.getSelectedMinute());
123+
public void onFirstWheeled(int index, String item) {
124+
textView.setText(item + ":" + picker.getSelectedSecondItem());
123125
}
124126

125127
@Override
126-
public void onMinuteWheeled(int index, String minute) {
127-
textView.setText(picker.getSelectedHour() + ":" + minute);
128+
public void onSecondWheeled(int index, String item) {
129+
textView.setText(picker.getSelectedFirstItem() + ":" + item);
128130
}
129131
});
130132
ViewGroup viewGroup = (ViewGroup) findViewById(R.id.wheelview_container);

app/src/main/java/cn/qqtheme/androidpicker/NestActivity.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import android.view.Window;
88
import android.widget.TextView;
99

10+
import cn.qqtheme.framework.picker.CarNumberPicker;
11+
import cn.qqtheme.framework.picker.LinkagePicker;
1012
import cn.qqtheme.framework.picker.TimePicker;
1113
import cn.qqtheme.framework.util.ConvertUtils;
1214
import cn.qqtheme.framework.widget.WheelView;
@@ -25,13 +27,10 @@ protected void onCreate(Bundle savedInstanceState) {
2527
super.onCreate(savedInstanceState);
2628
requestWindowFeature(Window.FEATURE_NO_TITLE);
2729
setContentView(R.layout.activity_nest);
30+
2831
final TextView textView = (TextView) findViewById(R.id.wheelview_tips);
2932
WheelView wheelView = (WheelView) findViewById(R.id.wheelview_single);
30-
wheelView.setItems(new String[]{
31-
"少数民族",
32-
"贵州穿青人",
33-
"不在56个少数民族之列",
34-
"第57个民族"});
33+
wheelView.setItems(new String[]{ "少数民族", "贵州穿青人", "不在56个少数民族之列", "第57个民族"});
3534
wheelView.setTextColor(0xFFFF00FF);
3635
WheelView.LineConfig config = new WheelView.LineConfig();
3736
config.setColor(0xFFFF00FF);//线颜色
@@ -45,16 +44,19 @@ public void onSelected(boolean isUserScroll, int index, String item) {
4544
textView.setText("index=" + index + ",item=" + item);
4645
}
4746
});
48-
final TimePicker picker = new TimePicker(this, TimePicker.HOUR_12);
49-
picker.setOnWheelListener(new TimePicker.OnWheelListener() {
47+
48+
final CarNumberPicker picker = new CarNumberPicker(this);
49+
picker.setLineConfig(new WheelView.LineConfig(0));
50+
picker.setOffset(3);
51+
picker.setOnWheelListener(new CarNumberPicker.OnWheelListener() {
5052
@Override
51-
public void onHourWheeled(int index, String hour) {
52-
textView.setText(hour + ":" + picker.getSelectedMinute());
53+
public void onFirstWheeled(int index, String item) {
54+
textView.setText(item + ":" + picker.getSelectedSecondItem());
5355
}
5456

5557
@Override
56-
public void onMinuteWheeled(int index, String minute) {
57-
textView.setText(picker.getSelectedHour() + ":" + minute);
58+
public void onSecondWheeled(int index, String item) {
59+
textView.setText(picker.getSelectedFirstItem() + ":" + item);
5860
}
5961
});
6062
ViewGroup viewGroup = (ViewGroup) findViewById(R.id.wheelview_container);

app/src/main/res/layout/activity_nest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
android:layout_height="50dp"
1111
android:background="#FFCCCCCC"
1212
android:gravity="center"
13-
android:orientation="horizontal">
13+
android:orientation="horizontal"
14+
android:padding="10dp">
1415

1516
<TextView
1617
style="?android:textAppearanceMedium"
@@ -48,7 +49,8 @@
4849
<LinearLayout
4950
android:id="@+id/wheelview_container"
5051
android:layout_width="match_parent"
51-
android:layout_height="wrap_content"
52+
android:layout_height="match_parent"
53+
android:gravity="center"
5254
android:orientation="vertical"/>
5355

5456
</LinearLayout>
Lines changed: 270 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,270 @@
1+
package cn.qqtheme.framework.picker;
2+
3+
import android.app.Activity;
4+
import android.support.annotation.NonNull;
5+
6+
import java.util.ArrayList;
7+
import java.util.Arrays;
8+
import java.util.List;
9+
10+
/**
11+
* 车牌号码选择器。数据参见http://www.360doc.com/content/12/0602/07/3899427_215339300.shtml
12+
* <br />
13+
* Author:李玉江[QQ:1032694760]
14+
* DateTime:2016/12/18 10:47
15+
* Builder:Android Studio
16+
*/
17+
public class CarNumberPicker extends LinkagePicker {
18+
19+
public CarNumberPicker(Activity activity) {
20+
super(activity, new CarNumberDataProvider());
21+
}
22+
23+
@Override
24+
protected int[] getColumnWidths(boolean onlyTwoColumn) {
25+
return new int[]{WRAP_CONTENT, WRAP_CONTENT, 0};
26+
}
27+
28+
public static class CarNumberDataProvider implements DataProvider {
29+
private List<String> provinces = new ArrayList<String>();
30+
31+
public CarNumberDataProvider() {
32+
provinces = Arrays.asList(
33+
"京", "津", "冀", "晋", "蒙", "辽", "吉", "黑", "沪",
34+
"苏", "浙", "皖", "闽", "赣", "鲁", "豫", "鄂", "湘",
35+
"粤", "桂", "琼", "渝", "川", "贵", "云", "藏", "陕",
36+
"甘", "青", "宁", "新");
37+
}
38+
39+
@Override
40+
public boolean isOnlyTwo() {
41+
return true;
42+
}
43+
44+
@Override
45+
public List<String> provideFirstData() {
46+
return provinces;
47+
}
48+
49+
@Override
50+
public List<String> provideSecondData(int firstIndex) {
51+
return parseData(provinces.get(firstIndex));
52+
}
53+
54+
@Override
55+
public List<String> provideThirdData(int firstIndex, int secondIndex) {
56+
return new ArrayList<String>();
57+
}
58+
59+
@NonNull
60+
private List<String> parseData(String province) {
61+
List<String> cities = new ArrayList<String>();
62+
switch (province) {
63+
case "京":
64+
for (char i = 'A'; i <= 'M'; i++) {
65+
cities.add(String.valueOf(i));
66+
}
67+
cities.remove("I");
68+
cities.add("Y");
69+
break;
70+
case "津":
71+
for (char i = 'A'; i <= 'H'; i++) {
72+
cities.add(String.valueOf(i));
73+
}
74+
break;
75+
case "冀":
76+
for (char i = 'A'; i <= 'H'; i++) {
77+
cities.add(String.valueOf(i));
78+
}
79+
cities.add("J");
80+
cities.add("R");
81+
cities.add("S");
82+
cities.add("T");
83+
break;
84+
case "晋":
85+
for (char i = 'A'; i <= 'M'; i++) {
86+
cities.add(String.valueOf(i));
87+
}
88+
cities.remove("G");
89+
cities.remove("I");
90+
break;
91+
case "蒙":
92+
for (char i = 'A'; i <= 'M'; i++) {
93+
cities.add(String.valueOf(i));
94+
}
95+
cities.remove("I");
96+
break;
97+
case "辽":
98+
for (char i = 'A'; i <= 'P'; i++) {
99+
cities.add(String.valueOf(i));
100+
}
101+
cities.remove("I");
102+
cities.remove("O");
103+
break;
104+
case "吉":
105+
for (char i = 'A'; i <= 'K'; i++) {
106+
cities.add(String.valueOf(i));
107+
}
108+
cities.remove("I");
109+
break;
110+
case "黑":
111+
for (char i = 'A'; i <= 'R'; i++) {
112+
cities.add(String.valueOf(i));
113+
}
114+
cities.remove("I");
115+
cities.remove("O");
116+
break;
117+
case "沪":
118+
for (char i = 'A'; i <= 'D'; i++) {
119+
cities.add(String.valueOf(i));
120+
}
121+
cities.add("R");
122+
break;
123+
case "苏":
124+
for (char i = 'A'; i <= 'N'; i++) {
125+
cities.add(String.valueOf(i));
126+
}
127+
cities.remove("I");
128+
break;
129+
case "浙":
130+
for (char i = 'A'; i <= 'L'; i++) {
131+
cities.add(String.valueOf(i));
132+
}
133+
cities.remove("I");
134+
break;
135+
case "皖":
136+
for (char i = 'A'; i <= 'S'; i++) {
137+
cities.add(String.valueOf(i));
138+
}
139+
cities.remove("I");
140+
cities.remove("O");
141+
break;
142+
case "闽":
143+
for (char i = 'A'; i <= 'K'; i++) {
144+
cities.add(String.valueOf(i));
145+
}
146+
cities.remove("I");
147+
break;
148+
case "赣":
149+
for (char i = 'A'; i <= 'M'; i++) {
150+
cities.add(String.valueOf(i));
151+
}
152+
cities.remove("I");
153+
break;
154+
case "鲁":
155+
for (char i = 'A'; i <= 'V'; i++) {
156+
cities.add(String.valueOf(i));
157+
}
158+
cities.remove("I");
159+
cities.remove("O");
160+
cities.remove("T");
161+
cities.add("Y");
162+
break;
163+
case "豫":
164+
for (char i = 'A'; i <= 'U'; i++) {
165+
cities.add(String.valueOf(i));
166+
}
167+
cities.remove("I");
168+
cities.remove("O");
169+
cities.remove("T");
170+
break;
171+
case "鄂":
172+
for (char i = 'A'; i <= 'S'; i++) {
173+
cities.add(String.valueOf(i));
174+
}
175+
cities.remove("I");
176+
cities.remove("O");
177+
break;
178+
case "湘":
179+
for (char i = 'A'; i <= 'N'; i++) {
180+
cities.add(String.valueOf(i));
181+
}
182+
cities.remove("I");
183+
cities.remove("O");
184+
cities.add("U");
185+
break;
186+
case "粤":
187+
for (char i = 'A'; i <= 'Z'; i++) {
188+
cities.add(String.valueOf(i));
189+
}
190+
cities.remove("I");
191+
cities.remove("O");
192+
break;
193+
case "桂":
194+
for (char i = 'A'; i <= 'P'; i++) {
195+
cities.add(String.valueOf(i));
196+
}
197+
cities.remove("I");
198+
cities.remove("O");
199+
cities.add("R");
200+
break;
201+
case "琼":
202+
case "宁":
203+
for (char i = 'A'; i <= 'E'; i++) {
204+
cities.add(String.valueOf(i));
205+
}
206+
break;
207+
case "渝":
208+
for (char i = 'A'; i <= 'D'; i++) {
209+
cities.add(String.valueOf(i));
210+
}
211+
cities.remove("D");
212+
cities.remove("E");
213+
break;
214+
case "川":
215+
for (char i = 'A'; i <= 'Z'; i++) {
216+
cities.add(String.valueOf(i));
217+
}
218+
cities.remove("G");
219+
cities.remove("I");
220+
cities.remove("O");
221+
break;
222+
case "贵":
223+
case "藏":
224+
for (char i = 'A'; i <= 'J'; i++) {
225+
cities.add(String.valueOf(i));
226+
}
227+
cities.remove("I");
228+
break;
229+
case "云":
230+
cities.add("A-V");//昆明市东川区(原东川市)
231+
for (char i = 'A'; i <= 'S'; i++) {
232+
cities.add(String.valueOf(i));
233+
}
234+
cities.remove("B");
235+
cities.remove("I");
236+
cities.remove("O");
237+
break;
238+
case "陕":
239+
for (char i = 'A'; i <= 'K'; i++) {
240+
cities.add(String.valueOf(i));
241+
}
242+
cities.remove("I");
243+
cities.add("V");
244+
break;
245+
case "甘":
246+
for (char i = 'A'; i <= 'P'; i++) {
247+
cities.add(String.valueOf(i));
248+
}
249+
cities.remove("I");
250+
cities.remove("O");
251+
break;
252+
case "青":
253+
for (char i = 'A'; i <= 'H'; i++) {
254+
cities.add(String.valueOf(i));
255+
}
256+
break;
257+
case "新":
258+
for (char i = 'A'; i <= 'R'; i++) {
259+
cities.add(String.valueOf(i));
260+
}
261+
cities.remove("I");
262+
cities.remove("O");
263+
break;
264+
}
265+
return cities;
266+
}
267+
268+
}
269+
270+
}

0 commit comments

Comments
 (0)