Showing preview only (398K chars total). Download the full file or copy to clipboard to get everything.
Repository: Bigkoo/Android-PickerView
Branch: master
Commit: e200d8c063aa
Files: 97
Total size: 367.5 KB
Directory structure:
gitextract_oqq9ulpw/
├── .gitignore
├── LICENSE
├── README-en.md
├── README.md
├── app/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── com/
│ │ └── bigkoo/
│ │ └── pickerviewdemo/
│ │ └── ApplicationTest.java
│ └── main/
│ ├── AndroidManifest.xml
│ ├── assets/
│ │ └── province.json
│ ├── java/
│ │ └── com/
│ │ └── bigkoo/
│ │ └── pickerviewdemo/
│ │ ├── FragmentTestActivity.java
│ │ ├── GetJsonDataUtil.java
│ │ ├── JsonDataActivity.java
│ │ ├── MainActivity.java
│ │ ├── TestCircleWheelViewActivity.java
│ │ ├── TestFragment.java
│ │ └── bean/
│ │ ├── CardBean.java
│ │ ├── JsonBean.java
│ │ └── ProvinceBean.java
│ └── res/
│ ├── layout/
│ │ ├── activity_fragmenttest.xml
│ │ ├── activity_json_data.xml
│ │ ├── activity_main.xml
│ │ ├── activity_test_circle_wheelview.xml
│ │ ├── fragment_test.xml
│ │ ├── pickerview_custom_lunar.xml
│ │ ├── pickerview_custom_options.xml
│ │ └── pickerview_custom_time.xml
│ ├── menu/
│ │ └── menu_main.xml
│ ├── values/
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── values-en/
│ │ └── strings.xml
│ └── values-w820dp/
│ └── dimens.xml
├── build.gradle
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── pickerview/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── com/
│ │ └── bigkoo/
│ │ └── pickerview/
│ │ └── ApplicationTest.java
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── bigkoo/
│ │ └── pickerview/
│ │ ├── adapter/
│ │ │ ├── ArrayWheelAdapter.java
│ │ │ └── NumericWheelAdapter.java
│ │ ├── builder/
│ │ │ ├── OptionsPickerBuilder.java
│ │ │ └── TimePickerBuilder.java
│ │ ├── configure/
│ │ │ └── PickerOptions.java
│ │ ├── listener/
│ │ │ ├── CustomListener.java
│ │ │ ├── ISelectTimeCallback.java
│ │ │ ├── OnDismissListener.java
│ │ │ ├── OnOptionsSelectChangeListener.java
│ │ │ ├── OnOptionsSelectListener.java
│ │ │ ├── OnTimeSelectChangeListener.java
│ │ │ └── OnTimeSelectListener.java
│ │ ├── utils/
│ │ │ ├── ChinaDate.java
│ │ │ ├── LunarCalendar.java
│ │ │ └── PickerViewAnimateUtil.java
│ │ └── view/
│ │ ├── BasePickerView.java
│ │ ├── OptionsPickerView.java
│ │ ├── TimePickerView.java
│ │ ├── WheelOptions.java
│ │ └── WheelTime.java
│ └── res/
│ ├── anim/
│ │ ├── pickerview_dialog_scale_in.xml
│ │ ├── pickerview_dialog_scale_out.xml
│ │ ├── pickerview_slide_in_bottom.xml
│ │ └── pickerview_slide_out_bottom.xml
│ ├── drawable/
│ │ └── selector_pickerview_btn.xml
│ ├── layout/
│ │ ├── include_pickerview_topbar.xml
│ │ ├── layout_basepickerview.xml
│ │ ├── pickerview_options.xml
│ │ └── pickerview_time.xml
│ ├── values/
│ │ ├── dimens.xml
│ │ ├── integers.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-en/
│ └── strings.xml
├── settings.gradle
└── wheelview/
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src/
├── androidTest/
│ └── java/
│ └── test/
│ └── wheelview/
│ └── ExampleInstrumentedTest.java
└── main/
├── AndroidManifest.xml
├── java/
│ └── com/
│ └── contrarywind/
│ ├── adapter/
│ │ └── WheelAdapter.java
│ ├── interfaces/
│ │ └── IPickerViewData.java
│ ├── listener/
│ │ ├── LoopViewGestureListener.java
│ │ └── OnItemSelectedListener.java
│ ├── timer/
│ │ ├── InertiaTimerTask.java
│ │ ├── MessageHandler.java
│ │ └── SmoothScrollTimerTask.java
│ └── view/
│ └── WheelView.java
└── res/
└── values/
├── attrs.xml
├── colors.xml
├── dimens.xml
└── strings.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# built application files
*.apk
*.ap_
# files for the dex VM
*.dex
# Java class files
*.class
# generated files
bin/
gen/
# Local configuration file (sdk path, etc)
local.properties
# Eclipse project files
.classpath
.project
# Android Studio
.idea/
.gradle
/*/local.properties
/*/out
build
/*/*/production
*.iml
*.iws
*.ipr
*~
*.swp
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README-en.md
================================================
# Android-PickerView
[](https://android-arsenal.com/api?level=9)
[](http://www.apache.org/licenses/LICENSE-2.0)
#### Show some :heart: and :stars: the repo to support the project
[](https://github.com/Bigkoo/Android-PickerView/stargazers) [](https://github.com/Bigkoo/Android-PickerView/network) [](https://github.com/Bigkoo/Android-PickerView/watchers)
#### [中文文档](https://github.com/Bigkoo/Android-PickerView/blob/master/README.md)
## Introduction
This is a library for android to pick date or options like IOS system WheelView widget.
and support for the linkage, dialog . It's very easy to use , you also can customize layout, which make it very customizable.
* there are two options called OptionsPickerView and TimePickerView
* OptionsPickerView supports three levels of linkage
* TimePickerView support selection date range
* support "year, month, day, hour, minute, second", "provincial, city, district" and other options of the unit (label) show or hide and customize label.
* supports custom text, color, text size, etc.
* If Item text length is too long, it will be adapted to the length of the Item to avoid the problem of incomplete display
# How to use
## 1.Add the dependency:
### Gradle
```java
compile 'com.contrarywind:Android-PickerView:4.1.9'
```
### Maven
```
<dependency>
<groupId>com.contrarywind</groupId>
<artifactId>Android-PickerView</artifactId>
<version>4.1.8</version>
<type>pom</type>
</dependency>
```
## 2.Add the following code in your Activity:
```java
//TimePicker
pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date,View v) {//Callback
tvTime.setText(getTime(date));
}
})
.build();
pvTime.show();
```
```java
//OptionsPicker
pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
////Callback
String tx = options1Items.get(options1).getPickerViewText()
+ options2Items.get(options1).get(option2)
+ options3Items.get(options1).get(option2).get(options3).getPickerViewText();
tvOptions.setText(tx);
}
}).build();
//pvOptions.setPicker(options1Items);
pvOptions.setPicker(options1Items, options2Items);
//pvOptions.setPicker(options1Items, options2Items, options3Items);
pvOptions.show();
```
## Just so easy ~
### Notes(2017-7-10)
- when we start setting the date, we need to pay special attention.
- reason: the internal component of the Calendar adds 1 processing, which made the month's number of count reduced one.
- error usage case:
>StartDate.set (2013,1,1);
>EndDate.set (2020,12,31);
- correct use case:
>StartDate.set (2013,0,1);
>EndDate.set (2020,11,31);
</br>
If the default style does not meet your expectations, You can also customize attributes to apply
## Customize Useage:
```java
Calendar selectedDate = Calendar.getInstance();
Calendar startDate = Calendar.getInstance();
startDate.set(2013,0,1);
Calendar endDate = Calendar.getInstance();
endDate.set(2020,11,1);
pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date,View v) {//callback
tvTime.setText(getTime(date));
}
})
.setType(new boolean[]{false, false, false, true, true, false})// type of date
.setCancelText("Cancel")
.setSubmitText("Sure")
.setContentSize(18)
.setTitleSize(20)
.setTitleText("Title")
.setOutSideCancelable(false)// default is true
.isCyclic(true)// default is false
.setTitleColor(Color.BLACK)
.setSubmitColor(Color.BLUE)
.setCancelColor(Color.BLUE)
.setTitleBgColor(0xFF666666)//night mode
.setBgColor(0xFF333333)//night mode
.setRangDate(startDate,endDate)
.setLabel("year","month","day","hours","mins","seconds")
.build();
```
```java
pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
////Callback
String tx = options1Items.get(options1).getPickerViewText()
+ options2Items.get(options1).get(option2)
+ options3Items.get(options1).get(option2).get(options3).getPickerViewText();
tvOptions.setText(tx);
}
})
.setSubmitText("sure")
.setCancelText("cancel")
.setTitleText("title")
.setSubCalSize(18)
.setTitleSize(20)
.setTitleColor(Color.BLACK)
.setSubmitColor(Color.BLUE)
.setCancelColor(Color.BLUE)
.setTitleBgColor(0xFF666666)//night mode
.setBgColor(0xFF444444)//night mode
.setContentTextSize(18)
.setLinkage(false)
.isCenterLabel(false) //default is true , if you choose false , the label text will add to all item ContentText right
.setLabels("province", "city", "district")
.setCyclic(false, false, false)
.setSelectOptions(0, 0, 0) //default options
.setOutSideCancelable(false)//dismiss, default is true
.isRestoreItem(true)// restore option with first item when select changed。
.build();
pvOptions.setPicker(options1Items, options2Items, options3Items);
```
## Customize Layout:
```java
private void initCustomTimePicker() {
// be careful:In the custom layout, the layout of the ID for optionspicker
// or TimePicker and its child widget must not be modified,
// otherwise will be reported NullPointerException
// For more details, Please refer to the two custom layouts in demo
Calendar selectedDate = Calendar.getInstance();//System current time
Calendar startDate = Calendar.getInstance();
startDate.set(2013,1,23);
Calendar endDate = Calendar.getInstance();
endDate.set(2019,2,28);
pvCustomTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {//call back
btn_CustomTime.setText(getTime(date));
}
}) .setType(new boolean[]{true, true, true, false, false, false})// year - month - day
.setDate(selectedDate)
.setRangDate(startDate,endDate)
.setLayoutRes(R.layout.pickerview_custom_time, new CustomListener() {
@Override
public void customLayout(View v) {
final TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish);
ImageView ivCancel = (ImageView) v.findViewById(R.id.iv_cancel);
tvSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvCustomTime.returnData(tvSubmit);
}
});
ivCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvCustomTime.dismiss();
}
});
}
})
.setDividerColor(Color.BLACK)
.build();
}
```
## If you need to set the non-linkage data:
```java
pvNoLinkOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
String str = "food:"+food.get(options1)
+"\nclothes:"+clothes.get(options2)
+"\ncomputer:"+computer.get(options3);
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
}
}).build();
pvNoLinkOptions.setNPicker(food,clothes,computer);
pvNoLinkOptions.show();
```
## For more detail, please refer to the Demo code, If there is still doubt about you, please [New Issue](https://github.com/Bigkoo/Android-PickerView/issues)
### [Here is demo code](https://github.com/Bigkoo/Android-PickerView/blob/master/app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.java)
### [Methods-and-parameters](https://github.com/Bigkoo/Android-PickerView/wiki/Methods-and-parameters)
## Thanks
- [WheelView](https://github.com/venshine/WheelView)
- [androidWheelView](https://github.com/weidongjian/androidWheelView/)
# License
```
Copyright 2014 Bigkoo
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
================================================
FILE: README.md
================================================
## 注意⚠️:已停止更新,原有版本jcenter库可以继续使用。建议直接下载源码引入 module 到自己项目改造。
## Android-PickerView
[](https://android-arsenal.com/api?level=9)
[](https://www.apache.org/licenses/LICENSE-2.0)
[ ](https://bintray.com/contrarywind/maven/Android-PickerView/_latestVersion)
[](https://github.com/Bigkoo/Android-PickerView/stargazers) [](https://github.com/Bigkoo/Android-PickerView/network) [](https://github.com/Bigkoo/Android-PickerView/watchers)
### [English Document](https://github.com/Bigkoo/Android-PickerView/blob/master/README-en.md)
### 注意事项、详请使用方式、更新日志等,请查看 [Wiki文档](https://github.com/Bigkoo/Android-PickerView/wiki)
**Wiki文档,Wiki文档,Wiki文档 !~ 重要的事情说三遍**
#### 对于使用上有任何疑问或优化建议等,欢迎加入QQ群讨论交流技术问题。
交流群1: 387051294(已满)
交流群2: 219962328(已满)
## 介绍
这是一款仿iOS的PickerView控件,有时间选择器和选项选择器,新版本的详细特性如下:
——TimePickerView 时间选择器,支持年月日时分,年月日,年月,时分等格式。
——OptionsPickerView 选项选择器,支持一,二,三级选项选择,并且可以设置是否联动 。
* 支持三级联动
* 设置是否联动
* 设置循环模式
* 支持自定义布局。
* 支持item的分隔线设置。
* 支持item间距设置。
* 时间选择器支持起始和终止日期设定。
* 支持“年,月,日,时,分,秒”,“省,市,区”等选项的单位(label)显示、隐藏和自定义。
* 支持自定义文字、颜色、文字大小等属性
* Item的文字长度过长时,文字会自适应缩放到Item的长度,避免显示不完全的问题
* 支持Dialog 模式。
* 支持自定义设置容器。
* 实时回调。






### 有兴趣研究3D滚轮效果的实现机制,希望把源码研究透彻的可以看看这篇博客:
### [Android-PickerView系列之源码解析篇(二)](http://blog.csdn.net/qq_22393017/article/details/59488906)
### 使用注意事项
* 注意:当我们进行设置时间的启始位置时,需要特别注意月份的设定
* 原因:Calendar组件内部的月份,是从0开始的,即0-11代表1-12月份
* 错误使用案例:
startDate.set(2013,1,1);
endDate.set(2020,12,1);
* 正确使用案例:
startDate.set(2013,0,1);
endDate.set(2020,11,1);
#### V4.1.9 版本更新说明(2019-10-20)
- 修复: 农历 day 偶现越界的问题。
- 优化: 显示布局中英文默认大写问题。
- 新增: 最大可见项的数目提供API给开发者设置。(setItemVisibleCount())
- 新增: 滚轮从中间到两边透明度渐变,提供开关API设置。(isAlphaGradient(true))
- 新增: 选中项圆形分割线样式。(DividerType.CIRCLE)
#### V4.1.8 版本更新说明(2019-4-24)
- 更新gradle版本, wheelview基础库由 compile 改为 api 依赖,避免gradle 5.0+版本无法引入。
- 修复 setTextXOffset 赋值问题。
#### V4.1.7 版本更新说明(2019-1-10)
- 修复 WheelView在初始化时,数据为空导致height=0,造成一直显示不出来的问题。
- 新增取消按钮的点击事件监听入口。
- 参数注解添加,规范数据类型。
- 废弃setBackgroundId方法, 更新方法命名为 setOutSideColor。
#### 更多历史版本详情,请查阅:[更新日志(4.x版本)](https://github.com/Bigkoo/Android-PickerView/wiki/更新日志(4.x版本))
#### 方法名与参数请查阅:[方法名与参数说明文档](https://github.com/Bigkoo/Android-PickerView/wiki/%E6%96%B9%E6%B3%95%E5%90%8D%E4%B8%8E%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E%EF%BC%883.x%E7%89%88%E6%9C%AC%EF%BC%89)
</br>
### **如何使用:**
#### Android-PickerView 库使用示例:
#### 1.添加Jcenter仓库 Gradle依赖:
```java
compile 'com.contrarywind:Android-PickerView:4.1.9'
```
或者
#### Maven
```
<dependency>
<groupId>com.contrarywind</groupId>
<artifactId>Android-PickerView</artifactId>
<version>4.1.9</version>
<type>pom</type>
</dependency>
```
#### 2.在项目中添加如下代码:
```java
//时间选择器
TimePickerView pvTime = new TimePickerBuilder(MainActivity.this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {
Toast.makeText(MainActivity.this, getTime(date), Toast.LENGTH_SHORT).show();
}
}).build();
```
```java
//条件选择器
OptionsPickerView pvOptions = new OptionsPickerBuilder(MainActivity.this, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
//返回的分别是三个级别的选中位置
String tx = options1Items.get(options1).getPickerViewText()
+ options2Items.get(options1).get(option2)
+ options3Items.get(options1).get(option2).get(options3).getPickerViewText();
tvOptions.setText(tx);
}
}).build();
pvOptions.setPicker(options1Items, options2Items, options3Items);
pvOptions.show();
```
#### 大功告成~
#### 3.如果默认样式不符合你的口味,可以自定义各种属性:
```java
Calendar selectedDate = Calendar.getInstance();
Calendar startDate = Calendar.getInstance();
//startDate.set(2013,1,1);
Calendar endDate = Calendar.getInstance();
//endDate.set(2020,1,1);
//正确设置方式 原因:注意事项有说明
startDate.set(2013,0,1);
endDate.set(2020,11,31);
pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date,View v) {//选中事件回调
tvTime.setText(getTime(date));
}
})
.setType(new boolean[]{true, true, true, true, true, true})// 默认全部显示
.setCancelText("Cancel")//取消按钮文字
.setSubmitText("Sure")//确认按钮文字
.setContentSize(18)//滚轮文字大小
.setTitleSize(20)//标题文字大小
.setTitleText("Title")//标题文字
.setOutSideCancelable(false)//点击屏幕,点在控件外部范围时,是否取消显示
.isCyclic(true)//是否循环滚动
.setTitleColor(Color.BLACK)//标题文字颜色
.setSubmitColor(Color.BLUE)//确定按钮文字颜色
.setCancelColor(Color.BLUE)//取消按钮文字颜色
.setTitleBgColor(0xFF666666)//标题背景颜色 Night mode
.setBgColor(0xFF333333)//滚轮背景颜色 Night mode
.setDate(selectedDate)// 如果不设置的话,默认是系统时间*/
.setRangDate(startDate,endDate)//起始终止年月日设定
.setLabel("年","月","日","时","分","秒")//默认设置为年月日时分秒
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
.isDialog(true)//是否显示为对话框样式
.build();
```
```java
pvOptions = new OptionsPickerBuilder(this, new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
//返回的分别是三个级别的选中位置
String tx = options1Items.get(options1).getPickerViewText()
+ options2Items.get(options1).get(option2)
+ options3Items.get(options1).get(option2).get(options3).getPickerViewText();
tvOptions.setText(tx);
}
}) .setOptionsSelectChangeListener(new OnOptionsSelectChangeListener() {
@Override
public void onOptionsSelectChanged(int options1, int options2, int options3) {
String str = "options1: " + options1 + "\noptions2: " + options2 + "\noptions3: " + options3;
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
}
})
.setSubmitText("确定")//确定按钮文字
.setCancelText("取消")//取消按钮文字
.setTitleText("城市选择")//标题
.setSubCalSize(18)//确定和取消文字大小
.setTitleSize(20)//标题文字大小
.setTitleColor(Color.BLACK)//标题文字颜色
.setSubmitColor(Color.BLUE)//确定按钮文字颜色
.setCancelColor(Color.BLUE)//取消按钮文字颜色
.setTitleBgColor(0xFF333333)//标题背景颜色 Night mode
.setBgColor(0xFF000000)//滚轮背景颜色 Night mode
.setContentTextSize(18)//滚轮文字大小
.setLinkage(false)//设置是否联动,默认true
.setLabels("省", "市", "区")//设置选择的三级单位
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
.setCyclic(false, false, false)//循环与否
.setSelectOptions(1, 1, 1) //设置默认选中项
.setOutSideCancelable(false)//点击外部dismiss default true
.isDialog(true)//是否显示为对话框样式
.isRestoreItem(true)//切换时是否还原,设置默认选中第一项。
.build();
pvOptions.setPicker(options1Items, options2Items, options3Items);//添加数据源
```
#### 4.如果需要自定义布局:
```java
// 注意:自定义布局中,id为 optionspicker 或者 timepicker 的布局以及其子控件必须要有,否则会报空指针
// 具体可参考demo 里面的两个自定义布局
pvCustomOptions = new OptionsPickerBuilder(this, new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3, View v) {
//返回的分别是三个级别的选中位置
String tx = cardItem.get(options1).getPickerViewText();
btn_CustomOptions.setText(tx);
}
})
.setLayoutRes(R.layout.pickerview_custom_options, new CustomListener() {
@Override
public void customLayout(View v) {
//自定义布局中的控件初始化及事件处理
final TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish);
final TextView tvAdd = (TextView) v.findViewById(R.id.tv_add);
ImageView ivCancel = (ImageView) v.findViewById(R.id.iv_cancel);
tvSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvCustomOptions.returnData(tvSubmit);
}
});
ivCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvCustomOptions.dismiss();
}
});
tvAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getData();
pvCustomOptions.setPicker(cardItem);
}
});
}
})
.build();
pvCustomOptions.setPicker(cardItem);//添加数据
```
#### 5.对使用还有疑问的话,可参考demo代码
[请戳我查看demo代码](https://github.com/Bigkoo/Android-PickerView/blob/master/app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.java)
#### 6.若只需要WheelView基础控件自行扩展实现逻辑,可直接添加基础控件库,Gradle 依赖:
```java
compile 'com.contrarywind:wheelview:4.1.0'
```
#### WheelView 使用代码示例:
xml布局:
```xml
<com.contrarywind.view.WheelView
android:id="@+id/wheelview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
```
Java 代码:
```java
WheelView wheelView = findViewById(R.id.wheelview);
wheelView.setCyclic(false);
final List<String> mOptionsItems = new ArrayList<>();
mOptionsItems.add("item0");
mOptionsItems.add("item1");
mOptionsItems.add("item2");
wheelView.setAdapter(new ArrayWheelAdapter(mOptionsItems));
wheelView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(int index) {
Toast.makeText(MainActivity.this, "" + mOptionsItems.get(index), Toast.LENGTH_SHORT).show();
}
});
```
### 效果图(招行信用卡的“掌上生活”里面条件选择器他们用的就是我这个库,大家可以当实际项目参考)

### Thanks
- WheelView
- [androidWheelView](https://github.com/weidongjian/androidWheelView/)
## License
```
Copyright 2014 Bigkoo
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
================================================
FILE: app/.gitignore
================================================
/build
================================================
FILE: app/build.gradle
================================================
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.bigkoo.pickerviewdemo"
minSdkVersion 14
targetSdkVersion 26
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions{
checkReleaseBuilds false
abortOnError false
}
}
dependencies {
// compile fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':pickerview')
// implementation 'com.contrarywind:Android-PickerView:4.1.9'
// implementation 'com.contrarywind:wheelview:4.1.0'
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.google.code.gson:gson:2.7'
}
================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/Sai/Documents/software/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
================================================
FILE: app/src/androidTest/java/com/bigkoo/pickerviewdemo/ApplicationTest.java
================================================
package com.bigkoo.pickerviewdemo;
import android.app.Application;
import android.test.ApplicationTestCase;
/**
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
*/
public class ApplicationTest extends ApplicationTestCase<Application> {
public ApplicationTest() {
super(Application.class);
}
}
================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bigkoo.pickerviewdemo">
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".JsonDataActivity"/>
<activity android:name=".FragmentTestActivity">
</activity>
<activity android:name=".TestCircleWheelViewActivity" />
</application>
</manifest>
================================================
FILE: app/src/main/assets/province.json
================================================
[
{
"name": "北京市",
"city": [
{
"name": "北京市",
"area": [
"东城区",
"西城区",
"崇文区",
"宣武区",
"朝阳区",
"丰台区",
"石景山区",
"海淀区",
"门头沟区",
"房山区",
"通州区",
"顺义区",
"昌平区",
"大兴区",
"平谷区",
"怀柔区",
"密云县",
"延庆县"
]
}
]
},
{
"name": "天津市",
"city": [
{
"name": "天津市",
"area": [
"和平区",
"河东区",
"河西区",
"南开区",
"河北区",
"红桥区",
"塘沽区",
"汉沽区",
"大港区",
"东丽区",
"西青区",
"津南区",
"北辰区",
"武清区",
"宝坻区",
"宁河县",
"静海县",
"蓟 县"
]
}
]
},
{
"name": "河北省",
"city": [
{
"name": "石家庄市",
"area": [
"长安区",
"桥东区",
"桥西区",
"新华区",
"郊 区",
"井陉矿区",
"井陉县",
"正定县",
"栾城县",
"行唐县",
"灵寿县",
"高邑县",
"深泽县",
"赞皇县",
"无极县",
"平山县",
"元氏县",
"赵 县",
"辛集市",
"藁",
"晋州市",
"新乐市",
"鹿泉市"
]
},
{
"name": "唐山市",
"area": [
"路南区",
"路北区",
"古冶区",
"开平区",
"新 区",
"丰润县",
"滦 县",
"滦南县",
"乐亭县",
"迁西县",
"玉田县",
"唐海县",
"遵化市",
"丰南市",
"迁安市"
]
},
{
"name": "秦皇岛市",
"area": [
"海港区",
"山海关区",
"北戴河区",
"青龙满族自治县",
"昌黎县",
"抚宁县",
"卢龙县"
]
},
{
"name": "邯郸市",
"area": [
"邯山区",
"丛台区",
"复兴区",
"峰峰矿区",
"邯郸县",
"临漳县",
"成安县",
"大名县",
"涉 县",
"磁 县",
"肥乡县",
"永年县",
"邱 县",
"鸡泽县",
"广平县",
"馆陶县",
"魏 县",
"曲周县",
"武安市"
]
},
{
"name": "邢台市",
"area": [
"桥东区",
"桥西区",
"邢台县",
"临城县",
"内丘县",
"柏乡县",
"隆尧县",
"任 县",
"南和县",
"宁晋县",
"巨鹿县",
"新河县",
"广宗县",
"平乡县",
"威 县",
"清河县",
"临西县",
"南宫市",
"沙河市"
]
},
{
"name": "保定市",
"area": [
"新市区",
"北市区",
"南市区",
"满城县",
"清苑县",
"涞水县",
"阜平县",
"徐水县",
"定兴县",
"唐 县",
"高阳县",
"容城县",
"涞源县",
"望都县",
"安新县",
"易 县",
"曲阳县",
"蠡 县",
"顺平县",
"博野",
"雄县",
"涿州市",
"定州市",
"安国市",
"高碑店市"
]
},
{
"name": "张家口",
"area": [
"桥东区",
"桥西区",
"宣化区",
"下花园区",
"宣化县",
"张北县",
"康保县",
"沽源县",
"尚义县",
"蔚 县",
"阳原县",
"怀安县",
"万全县",
"怀来县",
"涿鹿县",
"赤城县",
"崇礼县"
]
},
{
"name": "承德市",
"area": [
"双桥区",
"双滦区",
"鹰手营子矿区",
"承德县",
"兴隆县",
"平泉县",
"滦平县",
"隆化县",
"丰宁满族自治县",
"宽城满族自治县",
"围场满族蒙古族自治县"
]
},
{
"name": "沧州市",
"area": [
"新华区",
"运河区",
"沧 县",
"青 县",
"东光县",
"海兴县",
"盐山县",
"肃宁县",
"南皮县",
"吴桥县",
"献 县",
"孟村回族自治县",
"泊头市",
"任丘市",
"黄骅市",
"河间市"
]
},
{
"name": "廊坊市",
"area": [
"安次区",
"固安县",
"永清县",
"香河县",
"大城县",
"文安县",
"大厂回族自治县",
"霸州市",
"三河市"
]
},
{
"name": "衡水市",
"area": [
"桃城区",
"枣强县",
"武邑县",
"武强县",
"饶阳县",
"安平县",
"故城县",
"景 县",
"阜城县",
"冀州市",
"深州市"
]
}
]
},
{
"name": "山西省",
"city": [
{
"name": "太原市",
"area": [
"小店区",
"迎泽区",
"杏花岭区",
"尖草坪区",
"万柏林区",
"晋源区",
"清徐县",
"阳曲县",
"娄烦县",
"古交市"
]
},
{
"name": "大同市",
"area": [
"城 区",
"矿 区",
"南郊区",
"新荣区",
"阳高县",
"天镇县",
"广灵县",
"灵丘县",
"浑源县",
"左云县",
"大同县"
]
},
{
"name": "阳泉市",
"area": [
"城 区",
"矿 区",
"郊 区",
"平定县",
"盂 县"
]
},
{
"name": "长治市",
"area": [
"城 区",
"郊 区",
"长治县",
"襄垣县",
"屯留县",
"平顺县",
"黎城县",
"壶关县",
"长子县",
"武乡县",
"沁 县",
"沁源县",
"潞城市"
]
},
{
"name": "晋城市",
"area": [
"城 区",
"沁水县",
"阳城县",
"陵川县",
"泽州县",
"高平市"
]
},
{
"name": "朔州市",
"area": [
"朔城区",
"平鲁区",
"山阴县",
"应 县",
"右玉县",
"怀仁县"
]
},
{
"name": "忻州市",
"area": [
"忻府区",
"原平市",
"定襄县",
"五台县",
"代 县",
"繁峙县",
"宁武县",
"静乐县",
"神池县",
"五寨县",
"岢岚县",
"河曲县",
"保德县",
"偏关县"
]
},
{
"name": "吕梁市",
"area": [
"离石区",
"孝义市",
"汾阳市",
"文水县",
"交城县",
"兴 县",
"临 县",
"柳林县",
"石楼县",
"岚 县",
"方山县",
"中阳县",
"交口县"
]
},
{
"name": "晋中市",
"area": [
"榆次市",
"介休市",
"榆社县",
"左权县",
"和顺县",
"昔阳县",
"寿阳县",
"太谷县",
"祁 县",
"平遥县",
"灵石县"
]
},
{
"name": "临汾市",
"area": [
"临汾市",
"侯马市",
"霍州市",
"曲沃县",
"翼城县",
"襄汾县",
"洪洞县",
"古 县",
"安泽县",
"浮山县",
"吉 县",
"乡宁县",
"蒲 县",
"大宁县",
"永和县",
"隰 县",
"汾西县"
]
},
{
"name": "运城市",
"area": [
"运城市",
"永济市",
"河津市",
"芮城县",
"临猗县",
"万荣县",
"新绛县",
"稷山县",
"闻喜县",
"夏 县",
"绛 县",
"平陆县",
"垣曲县"
]
}
]
},
{
"name": "内蒙古",
"city": [
{
"name": "呼和浩特市",
"area": [
"新城区",
"回民区",
"玉泉区",
"郊 区",
"土默特左旗",
"托克托县",
"和林格尔县",
"清水河县",
"武川县"
]
},
{
"name": "包头市",
"area": [
"东河区",
"昆都伦区",
"青山区",
"石拐矿区",
"白云矿区",
"郊 区",
"土默特右旗",
"固阳县",
"达尔罕茂明安联合旗"
]
},
{
"name": "乌海市",
"area": [
"海勃湾区",
"海南区",
"乌达区"
]
},
{
"name": "赤峰市",
"area": [
"红山区",
"元宝山区",
"松山区",
"阿鲁科尔沁旗",
"巴林左旗",
"巴林右旗",
"林西县",
"克什克腾旗",
"翁牛特旗",
"喀喇沁旗",
"宁城县",
"敖汉旗"
]
},
{
"name": "呼伦贝尔市",
"area": [
"海拉尔市",
"满洲里市",
"扎兰屯市",
"牙克石市",
"根河市",
"额尔古纳市",
"阿荣旗",
"莫力达瓦达斡尔族自治旗",
"鄂伦春自治旗",
"鄂温克族自治旗",
"新巴尔虎右旗",
"新巴尔虎左旗",
"陈巴尔虎旗"
]
},
{
"name": "兴安盟",
"area": [
"乌兰浩特市",
"阿尔山市",
"科尔沁右翼前旗",
"科尔沁右翼中旗",
"扎赉特旗",
"突泉县"
]
},
{
"name": "通辽市",
"area": [
"科尔沁区",
"霍林郭勒市",
"科尔沁左翼中旗",
"科尔沁左翼后旗",
"开鲁县",
"库伦旗",
"奈曼旗",
"扎鲁特旗"
]
},
{
"name": "锡林郭勒盟",
"area": [
"二连浩特市",
"锡林浩特市",
"阿巴嘎旗",
"苏尼特左旗",
"苏尼特右旗",
"东乌珠穆沁旗",
"西乌珠穆沁旗",
"太仆寺旗",
"镶黄旗",
"正镶白旗",
"正蓝旗",
"多伦县"
]
},
{
"name": "乌兰察布盟",
"area": [
"集宁市",
"丰镇市",
"卓资县",
"化德县",
"商都县",
"兴和县",
"凉城县",
"察哈尔右翼前旗",
"察哈尔右翼中旗",
"察哈尔右翼后旗",
"四子王旗"
]
},
{
"name": "伊克昭盟",
"area": [
"东胜市",
"达拉特旗",
"准格尔旗",
"鄂托克前旗",
"鄂托克旗",
"杭锦旗",
"乌审旗",
"伊金霍洛旗"
]
},
{
"name": "巴彦淖尔盟",
"area": [
"临河市",
"五原县",
"磴口县",
"乌拉特前旗",
"乌拉特中旗",
"乌拉特后旗",
"杭锦后旗"
]
},
{
"name": "阿拉善盟",
"area": [
"阿拉善左旗",
"阿拉善右旗",
"额济纳旗"
]
}
]
},
{
"name": "辽宁省",
"city": [
{
"name": "沈阳市",
"area": [
"沈河区",
"皇姑区",
"和平区",
"大东区",
"铁西区",
"苏家屯区",
"东陵区",
"于洪区",
"新民市",
"法库县",
"辽中县",
"康平县",
"新城子区",
"其他"
]
},
{
"name": "大连市",
"area": [
"西岗区",
"中山区",
"沙河口区",
"甘井子区",
"旅顺口区",
"金州区",
"瓦房店市",
"普兰店市",
"庄河市",
"长海县",
"其他"
]
},
{
"name": "鞍山市",
"area": [
"铁东区",
"铁西区",
"立山区",
"千山区",
"海城市",
"台安县",
"岫岩满族自治县",
"其他"
]
},
{
"name": "抚顺市",
"area": [
"顺城区",
"新抚区",
"东洲区",
"望花区",
"抚顺县",
"清原满族自治县",
"新宾满族自治县",
"其他"
]
},
{
"name": "本溪市",
"area": [
"平山区",
"明山区",
"溪湖区",
"南芬区",
"本溪满族自治县",
"桓仁满族自治县",
"其他"
]
},
{
"name": "丹东市",
"area": [
"振兴区",
"元宝区",
"振安区",
"东港市",
"凤城市",
"宽甸满族自治县",
"其他"
]
},
{
"name": "锦州市",
"area": [
"太和区",
"古塔区",
"凌河区",
"凌海市",
"黑山县",
"义县",
"北宁市",
"其他"
]
},
{
"name": "营口市",
"area": [
"站前区",
"西市区",
"鲅鱼圈区",
"老边区",
"大石桥市",
"盖州市",
"其他"
]
},
{
"name": "阜新市",
"area": [
"海州区",
"新邱区",
"太平区",
"清河门区",
"细河区",
"彰武县",
"阜新蒙古族自治县",
"其他"
]
},
{
"name": "辽阳市",
"area": [
"白塔区",
"文圣区",
"宏伟区",
"太子河区",
"弓长岭区",
"灯塔市",
"辽阳县",
"其他"
]
},
{
"name": "盘锦",
"area": [
"双台子区",
"兴隆台区",
"盘山县",
"大洼县",
"其他"
]
},
{
"name": "铁岭市",
"area": [
"银州区",
"清河区",
"调兵山市",
"开原市",
"铁岭县",
"昌图县",
"西丰县",
"其他"
]
},
{
"name": "朝阳市",
"area": [
"双塔区",
"龙城区",
"凌源市",
"北票市",
"朝阳县",
"建平县",
"喀喇沁左翼蒙古族自治县",
"其他"
]
},
{
"name": "葫芦岛市",
"area": [
"龙港区",
"南票区",
"连山区",
"兴城市",
"绥中县",
"建昌县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "吉林省",
"city": [
{
"name": "长春市",
"area": [
"朝阳区",
"宽城区",
"二道区",
"南关区",
"绿园区",
"双阳区",
"九台市",
"榆树市",
"德惠市",
"农安县",
"其他"
]
},
{
"name": "吉林市",
"area": [
"船营区",
"昌邑区",
"龙潭区",
"丰满区",
"舒兰市",
"桦甸市",
"蛟河市",
"磐石市",
"永吉县",
"其他"
]
},
{
"name": "四平",
"area": [
"铁西区",
"铁东区",
"公主岭市",
"双辽市",
"梨树县",
"伊通满族自治县",
"其他"
]
},
{
"name": "辽源市",
"area": [
"龙山区",
"西安区",
"东辽县",
"东丰县",
"其他"
]
},
{
"name": "通化市",
"area": [
"东昌区",
"二道江区",
"梅河口市",
"集安市",
"通化县",
"辉南县",
"柳河县",
"其他"
]
},
{
"name": "白山市",
"area": [
"八道江区",
"江源区",
"临江市",
"靖宇县",
"抚松县",
"长白朝鲜族自治县",
"其他"
]
},
{
"name": "松原市",
"area": [
"宁江区",
"乾安县",
"长岭县",
"扶余县",
"前郭尔罗斯蒙古族自治县",
"其他"
]
},
{
"name": "白城市",
"area": [
"洮北区",
"大安市",
"洮南市",
"镇赉县",
"通榆县",
"其他"
]
},
{
"name": "延边朝鲜族自治州",
"area": [
"延吉市",
"图们市",
"敦化市",
"龙井市",
"珲春市",
"和龙市",
"安图县",
"汪清县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "黑龙江省",
"city": [
{
"name": "哈尔滨市",
"area": [
"松北区",
"道里区",
"南岗区",
"平房区",
"香坊区",
"道外区",
"呼兰区",
"阿城区",
"双城市",
"尚志市",
"五常市",
"宾县",
"方正县",
"通河县",
"巴彦县",
"延寿县",
"木兰县",
"依兰县",
"其他"
]
},
{
"name": "齐齐哈尔市",
"area": [
"龙沙区",
"昂昂溪区",
"铁锋区",
"建华区",
"富拉尔基区",
"碾子山区",
"梅里斯达斡尔族区",
"讷河市",
"富裕县",
"拜泉县",
"甘南县",
"依安县",
"克山县",
"泰来县",
"克东县",
"龙江县",
"其他"
]
},
{
"name": "鹤岗市",
"area": [
"兴山区",
"工农区",
"南山区",
"兴安区",
"向阳区",
"东山区",
"萝北县",
"绥滨县",
"其他"
]
},
{
"name": "双鸭山",
"area": [
"尖山区",
"岭东区",
"四方台区",
"宝山区",
"集贤县",
"宝清县",
"友谊县",
"饶河县",
"其他"
]
},
{
"name": "鸡西市",
"area": [
"鸡冠区",
"恒山区",
"城子河区",
"滴道区",
"梨树区",
"麻山区",
"密山市",
"虎林市",
"鸡东县",
"其他"
]
},
{
"name": "大庆市",
"area": [
"萨尔图区",
"红岗区",
"龙凤区",
"让胡路区",
"大同区",
"林甸县",
"肇州县",
"肇源县",
"杜尔伯特蒙古族自治县",
"其他"
]
},
{
"name": "伊春市",
"area": [
"伊春区",
"带岭区",
"南岔区",
"金山屯区",
"西林区",
"美溪区",
"乌马河区",
"翠峦区",
"友好区",
"上甘岭区",
"五营区",
"红星区",
"新青区",
"汤旺河区",
"乌伊岭区",
"铁力市",
"嘉荫县",
"其他"
]
},
{
"name": "牡丹江市",
"area": [
"爱民区",
"东安区",
"阳明区",
"西安区",
"绥芬河市",
"宁安市",
"海林市",
"穆棱市",
"林口县",
"东宁县",
"其他"
]
},
{
"name": "佳木斯市",
"area": [
"向阳区",
"前进区",
"东风区",
"郊区",
"同江市",
"富锦市",
"桦川县",
"抚远县",
"桦南县",
"汤原县",
"其他"
]
},
{
"name": "七台河市",
"area": [
"桃山区",
"新兴区",
"茄子河区",
"勃利县",
"其他"
]
},
{
"name": "黑河市",
"area": [
"爱辉区",
"北安市",
"五大连池市",
"逊克县",
"嫩江县",
"孙吴县",
"其他"
]
},
{
"name": "绥化市",
"area": [
"北林区",
"安达市",
"肇东市",
"海伦市",
"绥棱县",
"兰西县",
"明水县",
"青冈县",
"庆安县",
"望奎县",
"其他"
]
},
{
"name": "大兴安岭地区",
"area": [
"呼玛县",
"塔河县",
"漠河县",
"大兴安岭辖区",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "上海市",
"city": [
{
"name": "上海市",
"area": [
"黄浦区",
"卢湾区",
"徐汇区",
"长宁区",
"静安区",
"普陀区",
"闸北区",
"虹口区",
"杨浦区",
"宝山区",
"闵行区",
"嘉定区",
"松江区",
"金山区",
"青浦区",
"南汇区",
"奉贤区",
"浦东新区",
"崇明县",
"其他"
]
}
]
},
{
"name": "江苏省",
"city": [
{
"name": "南京市",
"area": [
"玄武区",
"白下区",
"秦淮区",
"建邺区",
"鼓楼区",
"下关区",
"栖霞区",
"雨花台区",
"浦口区",
"江宁区",
"六合区",
"溧水县",
"高淳县",
"其他"
]
},
{
"name": "苏州市",
"area": [
"金阊区",
"平江区",
"沧浪区",
"虎丘区",
"吴中区",
"相城区",
"常熟市",
"张家港市",
"昆山市",
"吴江市",
"太仓市",
"其他"
]
},
{
"name": "无锡市",
"area": [
"崇安区",
"南长区",
"北塘区",
"滨湖区",
"锡山区",
"惠山区",
"江阴市",
"宜兴市",
"其他"
]
},
{
"name": "常州市",
"area": [
"钟楼区",
"天宁区",
"戚墅堰区",
"新北区",
"武进区",
"金坛市",
"溧阳市",
"其他"
]
},
{
"name": "镇江市",
"area": [
"京口区",
"润州区",
"丹徒区",
"丹阳市",
"扬中市",
"句容市",
"其他"
]
},
{
"name": "南通市",
"area": [
"崇川区",
"港闸区",
"通州市",
"如皋市",
"海门市",
"启东市",
"海安县",
"如东县",
"其他"
]
},
{
"name": "泰州市",
"area": [
"海陵区",
"高港区",
"姜堰市",
"泰兴市",
"靖江市",
"兴化市",
"其他"
]
},
{
"name": "扬州市",
"area": [
"广陵区",
"维扬区",
"邗江区",
"江都市",
"仪征市",
"高邮市",
"宝应县",
"其他"
]
},
{
"name": "盐城市",
"area": [
"亭湖区",
"盐都区",
"大丰市",
"东台市",
"建湖县",
"射阳县",
"阜宁县",
"滨海县",
"响水县",
"其他"
]
},
{
"name": "连云港市",
"area": [
"新浦区",
"海州区",
"连云区",
"东海县",
"灌云县",
"赣榆县",
"灌南县",
"其他"
]
},
{
"name": "徐州市",
"area": [
"云龙区",
"鼓楼区",
"九里区",
"泉山区",
"贾汪区",
"邳州市",
"新沂市",
"铜山县",
"睢宁县",
"沛县",
"丰县",
"其他"
]
},
{
"name": "淮安市",
"area": [
"清河区",
"清浦区",
"楚州区",
"淮阴区",
"涟水县",
"洪泽县",
"金湖县",
"盱眙县",
"其他"
]
},
{
"name": "宿迁市",
"area": [
"宿城区",
"宿豫区",
"沭阳县",
"泗阳县",
"泗洪县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "浙江省",
"city": [
{
"name": "杭州市",
"area": [
"拱墅区",
"西湖区",
"上城区",
"下城区",
"江干区",
"滨江区",
"余杭区",
"萧山区",
"建德市",
"富阳市",
"临安市",
"桐庐县",
"淳安县",
"其他"
]
},
{
"name": "宁波市",
"area": [
"海曙区",
"江东区",
"江北区",
"镇海区",
"北仑区",
"鄞州区",
"余姚市",
"慈溪市",
"奉化市",
"宁海县",
"象山县",
"其他"
]
},
{
"name": "温州市",
"area": [
"鹿城区",
"龙湾区",
"瓯海区",
"瑞安市",
"乐清市",
"永嘉县",
"洞头县",
"平阳县",
"苍南县",
"文成县",
"泰顺县",
"其他"
]
},
{
"name": "嘉兴市",
"area": [
"秀城区",
"秀洲区",
"海宁市",
"平湖市",
"桐乡市",
"嘉善县",
"海盐县",
"其他"
]
},
{
"name": "湖州市",
"area": [
"吴兴区",
"南浔区",
"长兴县",
"德清县",
"安吉县",
"其他"
]
},
{
"name": "绍兴市",
"area": [
"越城区",
"诸暨市",
"上虞市",
"嵊州市",
"绍兴县",
"新昌县",
"其他"
]
},
{
"name": "金华市",
"area": [
"婺城区",
"金东区",
"兰溪市",
"义乌市",
"东阳市",
"永康市",
"武义县",
"浦江县",
"磐安县",
"其他"
]
},
{
"name": "衢州市",
"area": [
"柯城区",
"衢江区",
"江山市",
"龙游县",
"常山县",
"开化县",
"其他"
]
},
{
"name": "舟山市",
"area": [
"定海区",
"普陀区",
"岱山县",
"嵊泗县",
"其他"
]
},
{
"name": "台州市",
"area": [
"椒江区",
"黄岩区",
"路桥区",
"临海市",
"温岭市",
"玉环县",
"天台县",
"仙居县",
"三门县",
"其他"
]
},
{
"name": "丽水市",
"area": [
"莲都区",
"龙泉市",
"缙云县",
"青田县",
"云和县",
"遂昌县",
"松阳县",
"庆元县",
"景宁畲族自治县",
"其他"
]
},
{
"name": "其他市",
"area": [
"其他"
]
}
]
},
{
"name": "安徽省",
"city": [
{
"name": "合肥市",
"area": [
"庐阳区",
"瑶海区",
"蜀山区",
"包河区",
"长丰县",
"肥东县",
"肥西县",
"其他"
]
},
{
"name": "芜湖市",
"area": [
"镜湖区",
"弋江区",
"鸠江区",
"三山区",
"芜湖县",
"南陵县",
"繁昌县",
"其他"
]
},
{
"name": "蚌埠市",
"area": [
"蚌山区",
"龙子湖区",
"禹会区",
"淮上区",
"怀远县",
"固镇县",
"五河县",
"其他"
]
},
{
"name": "淮南市",
"area": [
"田家庵区",
"大通区",
"谢家集区",
"八公山区",
"潘集区",
"凤台县",
"其他"
]
},
{
"name": "马鞍山市",
"area": [
"雨山区",
"花山区",
"金家庄区",
"当涂县",
"其他"
]
},
{
"name": "淮北市",
"area": [
"相山区",
"杜集区",
"烈山区",
"濉溪县",
"其他"
]
},
{
"name": "铜陵市",
"area": [
"铜官山区",
"狮子山区",
"郊区",
"铜陵县",
"其他"
]
},
{
"name": "安庆市",
"area": [
"迎江区",
"大观区",
"宜秀区",
"桐城市",
"宿松县",
"枞阳县",
"太湖县",
"怀宁县",
"岳西县",
"望江县",
"潜山县",
"其他"
]
},
{
"name": "黄山市",
"area": [
"屯溪区",
"黄山区",
"徽州区",
"休宁县",
"歙县",
"祁门县",
"黟县",
"其他"
]
},
{
"name": "滁州市",
"area": [
"琅琊区",
"南谯区",
"天长市",
"明光市",
"全椒县",
"来安县",
"定远县",
"凤阳县",
"其他"
]
},
{
"name": "阜阳市",
"area": [
"颍州区",
"颍东区",
"颍泉区",
"界首市",
"临泉县",
"颍上县",
"阜南县",
"太和县",
"其他"
]
},
{
"name": "宿州市",
"area": [
"埇桥区",
"萧县",
"泗县",
"砀山县",
"灵璧县",
"其他"
]
},
{
"name": "巢湖市",
"area": [
"居巢区",
"含山县",
"无为县",
"庐江县",
"和县",
"其他"
]
},
{
"name": "六安市",
"area": [
"金安区",
"裕安区",
"寿县",
"霍山县",
"霍邱县",
"舒城县",
"金寨县",
"其他"
]
},
{
"name": "亳州市",
"area": [
"谯城区",
"利辛县",
"涡阳县",
"蒙城县",
"其他"
]
},
{
"name": "池州市",
"area": [
"贵池区",
"东至县",
"石台县",
"青阳县",
"其他"
]
},
{
"name": "宣城市",
"area": [
"宣州区",
"宁国市",
"广德县",
"郎溪县",
"泾县",
"旌德县",
"绩溪县",
"其他"
]
},
{
"name": "其他市",
"area": [
"其他"
]
}
]
},
{
"name": "福建省",
"city": [
{
"name": "福州市",
"area": [
"鼓楼区",
"台江区",
"仓山区",
"马尾区",
"晋安区",
"福清市",
"长乐市",
"闽侯县",
"闽清县",
"永泰县",
"连江县",
"罗源县",
"平潭县",
"其他"
]
},
{
"name": "厦门市",
"area": [
"思明区",
"海沧区",
"湖里区",
"集美区",
"同安区",
"翔安区",
"其他"
]
},
{
"name": "莆田市",
"area": [
"城厢区",
"涵江区",
"荔城区",
"秀屿区",
"仙游县",
"其他"
]
},
{
"name": "三明市",
"area": [
"梅列区",
"三元区",
"永安市",
"明溪县",
"将乐县",
"大田县",
"宁化县",
"建宁县",
"沙县",
"尤溪县",
"清流县",
"泰宁县",
"其他"
]
},
{
"name": "泉州市",
"area": [
"鲤城区",
"丰泽区",
"洛江区",
"泉港区",
"石狮市",
"晋江市",
"南安市",
"惠安县",
"永春县",
"安溪县",
"德化县",
"金门县",
"其他"
]
},
{
"name": "漳州市",
"area": [
"芗城区",
"龙文区",
"龙海市",
"平和县",
"南靖县",
"诏安县",
"漳浦县",
"华安县",
"东山县",
"长泰县",
"云霄县",
"其他"
]
},
{
"name": "南平市",
"area": [
"延平区",
"建瓯市",
"邵武市",
"武夷山市",
"建阳市",
"松溪县",
"光泽县",
"顺昌县",
"浦城县",
"政和县",
"其他"
]
},
{
"name": "龙岩市",
"area": [
"新罗区",
"漳平市",
"长汀县",
"武平县",
"上杭县",
"永定县",
"连城县",
"其他"
]
},
{
"name": "宁德市",
"area": [
"蕉城区",
"福安市",
"福鼎市",
"寿宁县",
"霞浦县",
"柘荣县",
"屏南县",
"古田县",
"周宁县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "江西省",
"city": [
{
"name": "南昌市",
"area": [
"东湖区",
"西湖区",
"青云谱区",
"湾里区",
"青山湖区",
"新建县",
"南昌县",
"进贤县",
"安义县",
"其他"
]
},
{
"name": "景德镇市",
"area": [
"珠山区",
"昌江区",
"乐平市",
"浮梁县",
"其他"
]
},
{
"name": "萍乡市",
"area": [
"安源区",
"湘东区",
"莲花县",
"上栗县",
"芦溪县",
"其他"
]
},
{
"name": "九江市",
"area": [
"浔阳区",
"庐山区",
"瑞昌市",
"九江县",
"星子县",
"武宁县",
"彭泽县",
"永修县",
"修水县",
"湖口县",
"德安县",
"都昌县",
"其他"
]
},
{
"name": "新余市",
"area": [
"渝水区",
"分宜县",
"其他"
]
},
{
"name": "鹰潭市",
"area": [
"月湖区",
"贵溪市",
"余江县",
"其他"
]
},
{
"name": "赣州市",
"area": [
"章贡区",
"瑞金市",
"南康市",
"石城县",
"安远县",
"赣县",
"宁都县",
"寻乌县",
"兴国县",
"定南县",
"上犹县",
"于都县",
"龙南县",
"崇义县",
"信丰县",
"全南县",
"大余县",
"会昌县",
"其他"
]
},
{
"name": "吉安市",
"area": [
"吉州区",
"青原区",
"井冈山市",
"吉安县",
"永丰县",
"永新县",
"新干县",
"泰和县",
"峡江县",
"遂川县",
"安福县",
"吉水县",
"万安县",
"其他"
]
},
{
"name": "宜春市",
"area": [
"袁州区",
"丰城市",
"樟树市",
"高安市",
"铜鼓县",
"靖安县",
"宜丰县",
"奉新县",
"万载县",
"上高县",
"其他"
]
},
{
"name": "抚州市",
"area": [
"临川区",
"南丰县",
"乐安县",
"金溪县",
"南城县",
"东乡县",
"资溪县",
"宜黄县",
"广昌县",
"黎川县",
"崇仁县",
"其他"
]
},
{
"name": "上饶市",
"area": [
"信州区",
"德兴市",
"上饶县",
"广丰县",
"鄱阳县",
"婺源县",
"铅山县",
"余干县",
"横峰县",
"弋阳县",
"玉山县",
"万年县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "山东省",
"city": [
{
"name": "济南市",
"area": [
"市中区",
"历下区",
"天桥区",
"槐荫区",
"历城区",
"长清区",
"章丘市",
"平阴县",
"济阳县",
"商河县",
"其他"
]
},
{
"name": "青岛市",
"area": [
"市南区",
"市北区",
"城阳区",
"四方区",
"李沧区",
"黄岛区",
"崂山区",
"胶南市",
"胶州市",
"平度市",
"莱西市",
"即墨市",
"其他"
]
},
{
"name": "淄博市",
"area": [
"张店区",
"临淄区",
"淄川区",
"博山区",
"周村区",
"桓台县",
"高青县",
"沂源县",
"其他"
]
},
{
"name": "枣庄市",
"area": [
"市中区",
"山亭区",
"峄城区",
"台儿庄区",
"薛城区",
"滕州市",
"其他"
]
},
{
"name": "东营市",
"area": [
"东营区",
"河口区",
"垦利县",
"广饶县",
"利津县",
"其他"
]
},
{
"name": "烟台市",
"area": [
"芝罘区",
"福山区",
"牟平区",
"莱山区",
"龙口市",
"莱阳市",
"莱州市",
"招远市",
"蓬莱市",
"栖霞市",
"海阳市",
"长岛县",
"其他"
]
},
{
"name": "潍坊市",
"area": [
"潍城区",
"寒亭区",
"坊子区",
"奎文区",
"青州市",
"诸城市",
"寿光市",
"安丘市",
"高密市",
"昌邑市",
"昌乐县",
"临朐县",
"其他"
]
},
{
"name": "济宁市",
"area": [
"市中区",
"任城区",
"曲阜市",
"兖州市",
"邹城市",
"鱼台县",
"金乡县",
"嘉祥县",
"微山县",
"汶上县",
"泗水县",
"梁山县",
"其他"
]
},
{
"name": "泰安市",
"area": [
"泰山区",
"岱岳区",
"新泰市",
"肥城市",
"宁阳县",
"东平县",
"其他"
]
},
{
"name": "威海市",
"area": [
"环翠区",
"乳山市",
"文登市",
"荣成市",
"其他"
]
},
{
"name": "日照市",
"area": [
"东港区",
"岚山区",
"五莲县",
"莒县",
"其他"
]
},
{
"name": "莱芜市",
"area": [
"莱城区",
"钢城区",
"其他"
]
},
{
"name": "临沂市",
"area": [
"兰山区",
"罗庄区",
"河东区",
"沂南县",
"郯城县",
"沂水县",
"苍山县",
"费县",
"平邑县",
"莒南县",
"蒙阴县",
"临沭县",
"其他"
]
},
{
"name": "德州市",
"area": [
"德城区",
"乐陵市",
"禹城市",
"陵县",
"宁津县",
"齐河县",
"武城县",
"庆云县",
"平原县",
"夏津县",
"临邑县",
"其他"
]
},
{
"name": "聊城市",
"area": [
"东昌府区",
"临清市",
"高唐县",
"阳谷县",
"茌平县",
"莘县",
"东阿县",
"冠县",
"其他"
]
},
{
"name": "滨州市",
"area": [
"滨城区",
"邹平县",
"沾化县",
"惠民县",
"博兴县",
"阳信县",
"无棣县",
"其他"
]
},
{
"name": "菏泽市",
"area": [
"牡丹区",
"鄄城县",
"单县",
"郓城县",
"曹县",
"定陶县",
"巨野县",
"东明县",
"成武县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "河南省",
"city": [
{
"name": "郑州市",
"area": [
"中原区",
"金水区",
"二七区",
"管城回族区",
"上街区",
"惠济区",
"巩义市",
"新郑市",
"新密市",
"登封市",
"荥阳市",
"中牟县",
"其他"
]
},
{
"name": "开封市",
"area": [
"鼓楼区",
"龙亭区",
"顺河回族区",
"禹王台区",
"金明区",
"开封县",
"尉氏县",
"兰考县",
"杞县",
"通许县",
"其他"
]
},
{
"name": "洛阳市",
"area": [
"西工区",
"老城区",
"涧西区",
"瀍河回族区",
"洛龙区",
"吉利区",
"偃师市",
"孟津县",
"汝阳县",
"伊川县",
"洛宁县",
"嵩县",
"宜阳县",
"新安县",
"栾川县",
"其他"
]
},
{
"name": "平顶山市",
"area": [
"新华区",
"卫东区",
"湛河区",
"石龙区",
"汝州市",
"舞钢市",
"宝丰县",
"叶县",
"郏县",
"鲁山县",
"其他"
]
},
{
"name": "安阳市",
"area": [
"北关区",
"文峰区",
"殷都区",
"龙安区",
"林州市",
"安阳县",
"滑县",
"内黄县",
"汤阴县",
"其他"
]
},
{
"name": "鹤壁市",
"area": [
"淇滨区",
"山城区",
"鹤山区",
"浚县",
"淇县",
"其他"
]
},
{
"name": "新乡市",
"area": [
"卫滨区",
"红旗区",
"凤泉区",
"牧野区",
"卫辉市",
"辉县市",
"新乡县",
"获嘉县",
"原阳县",
"长垣县",
"封丘县",
"延津县",
"其他"
]
},
{
"name": "焦作市",
"area": [
"解放区",
"中站区",
"马村区",
"山阳区",
"沁阳市",
"孟州市",
"修武县",
"温县",
"武陟县",
"博爱县",
"其他"
]
},
{
"name": "濮阳市",
"area": [
"华龙区",
"濮阳县",
"南乐县",
"台前县",
"清丰县",
"范县",
"其他"
]
},
{
"name": "许昌市",
"area": [
"魏都区",
"禹州市",
"长葛市",
"许昌县",
"鄢陵县",
"襄城县",
"其他"
]
},
{
"name": "漯河市",
"area": [
"源汇区",
"郾城区",
"召陵区",
"临颍县",
"舞阳县",
"其他"
]
},
{
"name": "三门峡市",
"area": [
"湖滨区",
"义马市",
"灵宝市",
"渑池县",
"卢氏县",
"陕县",
"其他"
]
},
{
"name": "南阳市",
"area": [
"卧龙区",
"宛城区",
"邓州市",
"桐柏县",
"方城县",
"淅川县",
"镇平县",
"唐河县",
"南召县",
"内乡县",
"新野县",
"社旗县",
"西峡县",
"其他"
]
},
{
"name": "商丘市",
"area": [
"梁园区",
"睢阳区",
"永城市",
"宁陵县",
"虞城县",
"民权县",
"夏邑县",
"柘城县",
"睢县",
"其他"
]
},
{
"name": "信阳市",
"area": [
"浉河区",
"平桥区",
"潢川县",
"淮滨县",
"息县",
"新县",
"商城县",
"固始县",
"罗山县",
"光山县",
"其他"
]
},
{
"name": "周口市",
"area": [
"川汇区",
"项城市",
"商水县",
"淮阳县",
"太康县",
"鹿邑县",
"西华县",
"扶沟县",
"沈丘县",
"郸城县",
"其他"
]
},
{
"name": "驻马店市",
"area": [
"驿城区",
"确山县",
"新蔡县",
"上蔡县",
"西平县",
"泌阳县",
"平舆县",
"汝南县",
"遂平县",
"正阳县",
"其他"
]
},
{
"name": "焦作市",
"area": [
"济源市",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "湖北省",
"city": [
{
"name": "武汉市",
"area": [
"江岸区",
"武昌区",
"江汉区",
"硚口区",
"汉阳区",
"青山区",
"洪山区",
"东西湖区",
"汉南区",
"蔡甸区",
"江夏区",
"黄陂区",
"新洲区",
"其他"
]
},
{
"name": "黄石市",
"area": [
"黄石港区",
"西塞山区",
"下陆区",
"铁山区",
"大冶市",
"阳新县",
"其他"
]
},
{
"name": "十堰市",
"area": [
"张湾区",
"茅箭区",
"丹江口市",
"郧县",
"竹山县",
"房县",
"郧西县",
"竹溪县",
"其他"
]
},
{
"name": "荆州市",
"area": [
"沙市区",
"荆州区",
"洪湖市",
"石首市",
"松滋市",
"监利县",
"公安县",
"江陵县",
"其他"
]
},
{
"name": "宜昌市",
"area": [
"西陵区",
"伍家岗区",
"点军区",
"猇亭区",
"夷陵区",
"宜都市",
"当阳市",
"枝江市",
"秭归县",
"远安县",
"兴山县",
"五峰土家族自治县",
"长阳土家族自治县",
"其他"
]
},
{
"name": "襄樊市",
"area": [
"襄城区",
"樊城区",
"襄阳区",
"老河口市",
"枣阳市",
"宜城市",
"南漳县",
"谷城县",
"保康县",
"其他"
]
},
{
"name": "鄂州市",
"area": [
"鄂城区",
"华容区",
"梁子湖区",
"其他"
]
},
{
"name": "荆门市",
"area": [
"东宝区",
"掇刀区",
"钟祥市",
"京山县",
"沙洋县",
"其他"
]
},
{
"name": "孝感市",
"area": [
"孝南区",
"应城市",
"安陆市",
"汉川市",
"云梦县",
"大悟县",
"孝昌县",
"其他"
]
},
{
"name": "黄冈市",
"area": [
"黄州区",
"麻城市",
"武穴市",
"红安县",
"罗田县",
"浠水县",
"蕲春县",
"黄梅县",
"英山县",
"团风县",
"其他"
]
},
{
"name": "咸宁市",
"area": [
"咸安区",
"赤壁市",
"嘉鱼县",
"通山县",
"崇阳县",
"通城县",
"其他"
]
},
{
"name": "随州市",
"area": [
"曾都区",
"广水市",
"其他"
]
},
{
"name": "恩施土家族苗族自治州",
"area": [
"恩施市",
"利川市",
"建始县",
"来凤县",
"巴东县",
"鹤峰县",
"宣恩县",
"咸丰县",
"其他"
]
},
{
"name": "仙桃市",
"area": [
"仙桃"
]
},
{
"name": "天门市",
"area": [
"天门"
]
},
{
"name": "潜江市",
"area": [
"潜江"
]
},
{
"name": "神农架林区",
"area": [
"神农架林区"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "湖南省",
"city": [
{
"name": "长沙市",
"area": [
"岳麓区",
"芙蓉区",
"天心区",
"开福区",
"雨花区",
"浏阳市",
"长沙县",
"望城县",
"宁乡县",
"其他"
]
},
{
"name": "株洲市",
"area": [
"天元区",
"荷塘区",
"芦淞区",
"石峰区",
"醴陵市",
"株洲县",
"炎陵县",
"茶陵县",
"攸县",
"其他"
]
},
{
"name": "湘潭市",
"area": [
"岳塘区",
"雨湖区",
"湘乡市",
"韶山市",
"湘潭县",
"其他"
]
},
{
"name": "衡阳市",
"area": [
"雁峰区",
"珠晖区",
"石鼓区",
"蒸湘区",
"南岳区",
"耒阳市",
"常宁市",
"衡阳县",
"衡东县",
"衡山县",
"衡南县",
"祁东县",
"其他"
]
},
{
"name": "邵阳市",
"area": [
"双清区",
"大祥区",
"北塔区",
"武冈市",
"邵东县",
"洞口县",
"新邵县",
"绥宁县",
"新宁县",
"邵阳县",
"隆回县",
"城步苗族自治县",
"其他"
]
},
{
"name": "岳阳市",
"area": [
"岳阳楼区",
"云溪区",
"君山区",
"临湘市",
"汨罗市",
"岳阳县",
"湘阴县",
"平江县",
"华容县",
"其他"
]
},
{
"name": "常德市",
"area": [
"武陵区",
"鼎城区",
"津市市",
"澧县",
"临澧县",
"桃源县",
"汉寿县",
"安乡县",
"石门县",
"其他"
]
},
{
"name": "张家界市",
"area": [
"永定区",
"武陵源区",
"慈利县",
"桑植县",
"其他"
]
},
{
"name": "益阳市",
"area": [
"赫山区",
"资阳区",
"沅江市",
"桃江县",
"南县",
"安化县",
"其他"
]
},
{
"name": "郴州市",
"area": [
"北湖区",
"苏仙区",
"资兴市",
"宜章县",
"汝城县",
"安仁县",
"嘉禾县",
"临武县",
"桂东县",
"永兴县",
"桂阳县",
"其他"
]
},
{
"name": "永州市",
"area": [
"冷水滩区",
"零陵区",
"祁阳县",
"蓝山县",
"宁远县",
"新田县",
"东安县",
"江永县",
"道县",
"双牌县",
"江华瑶族自治县",
"其他"
]
},
{
"name": "怀化市",
"area": [
"鹤城区",
"洪江市",
"会同县",
"沅陵县",
"辰溪县",
"溆浦县",
"中方县",
"新晃侗族自治县",
"芷江侗族自治县",
"通道侗族自治县",
"靖州苗族侗族自治县",
"麻阳苗族自治县",
"其他"
]
},
{
"name": "娄底市",
"area": [
"娄星区",
"冷水江市",
"涟源市",
"新化县",
"双峰县",
"其他"
]
},
{
"name": "湘西土家族苗族自治州",
"area": [
"吉首市",
"古丈县",
"龙山县",
"永顺县",
"凤凰县",
"泸溪县",
"保靖县",
"花垣县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "广东省",
"city": [
{
"name": "广州市",
"area": [
"越秀区",
"荔湾区",
"海珠区",
"天河区",
"白云区",
"黄埔区",
"番禺区",
"花都区",
"南沙区",
"萝岗区",
"增城市",
"从化市",
"其他"
]
},
{
"name": "深圳市",
"area": [
"福田区",
"罗湖区",
"南山区",
"宝安区",
"龙岗区",
"盐田区",
"其他"
]
},
{
"name": "东莞市",
"area": [
"莞城",
"常平",
"塘厦",
"塘厦",
"塘厦",
"其他"
]
},
{
"name": "中山市",
"area": [
"中山"
]
},
{
"name": "潮州市",
"area": [
"湘桥区",
"潮安县",
"饶平县",
"其他"
]
},
{
"name": "揭阳市",
"area": [
"榕城区",
"揭东县",
"揭西县",
"惠来县",
"普宁市",
"其他"
]
},
{
"name": "云浮市",
"area": [
"云城区",
"新兴县",
"郁南县",
"云安县",
"罗定市",
"其他"
]
},
{
"name": "珠海市",
"area": [
"香洲区",
"斗门区",
"金湾区",
"其他"
]
},
{
"name": "汕头市",
"area": [
"金平区",
"濠江区",
"龙湖区",
"潮阳区",
"潮南区",
"澄海区",
"南澳县",
"其他"
]
},
{
"name": "韶关市",
"area": [
"浈江区",
"武江区",
"曲江区",
"乐昌市",
"南雄市",
"始兴县",
"仁化县",
"翁源县",
"新丰县",
"乳源瑶族自治县",
"其他"
]
},
{
"name": "佛山市",
"area": [
"禅城区",
"南海区",
"顺德区",
"三水区",
"高明区",
"其他"
]
},
{
"name": "江门市",
"area": [
"蓬江区",
"江海区",
"新会区",
"恩平市",
"台山市",
"开平市",
"鹤山市",
"其他"
]
},
{
"name": "湛江市",
"area": [
"赤坎区",
"霞山区",
"坡头区",
"麻章区",
"吴川市",
"廉江市",
"雷州市",
"遂溪县",
"徐闻县",
"其他"
]
},
{
"name": "茂名市",
"area": [
"茂南区",
"茂港区",
"化州市",
"信宜市",
"高州市",
"电白县",
"其他"
]
},
{
"name": "肇庆市",
"area": [
"端州区",
"鼎湖区",
"高要市",
"四会市",
"广宁县",
"怀集县",
"封开县",
"德庆县",
"其他"
]
},
{
"name": "惠州市",
"area": [
"惠城区",
"惠阳区",
"博罗县",
"惠东县",
"龙门县",
"其他"
]
},
{
"name": "梅州市",
"area": [
"梅江区",
"兴宁市",
"梅县",
"大埔县",
"丰顺县",
"五华县",
"平远县",
"蕉岭县",
"其他"
]
},
{
"name": "汕尾市",
"area": [
"城区",
"陆丰市",
"海丰县",
"陆河县",
"其他"
]
},
{
"name": "河源市",
"area": [
"源城区",
"紫金县",
"龙川县",
"连平县",
"和平县",
"东源县",
"其他"
]
},
{
"name": "阳江市",
"area": [
"江城区",
"阳春市",
"阳西县",
"阳东县",
"其他"
]
},
{
"name": "清远市",
"area": [
"清城区",
"英德市",
"连州市",
"佛冈县",
"阳山县",
"清新县",
"连山壮族瑶族自治县",
"连南瑶族自治县",
"其他"
]
}
]
},
{
"name": "广西",
"city": [
{
"name": "南宁市",
"area": [
"青秀区",
"兴宁区",
"西乡塘区",
"良庆区",
"江南区",
"邕宁区",
"武鸣县",
"隆安县",
"马山县",
"上林县",
"宾阳县",
"横县",
"其他"
]
},
{
"name": "柳州市",
"area": [
"城中区",
"鱼峰区",
"柳北区",
"柳南区",
"柳江县",
"柳城县",
"鹿寨县",
"融安县",
"融水苗族自治县",
"三江侗族自治县",
"其他"
]
},
{
"name": "桂林市",
"area": [
"象山区",
"秀峰区",
"叠彩区",
"七星区",
"雁山区",
"阳朔县",
"临桂县",
"灵川县",
"全州县",
"平乐县",
"兴安县",
"灌阳县",
"荔浦县",
"资源县",
"永福县",
"龙胜各族自治县",
"恭城瑶族自治县",
"其他"
]
},
{
"name": "梧州市",
"area": [
"万秀区",
"蝶山区",
"长洲区",
"岑溪市",
"苍梧县",
"藤县",
"蒙山县",
"其他"
]
},
{
"name": "北海市",
"area": [
"海城区",
"银海区",
"铁山港区",
"合浦县",
"其他"
]
},
{
"name": "防城港市",
"area": [
"港口区",
"防城区",
"东兴市",
"上思县",
"其他"
]
},
{
"name": "钦州市",
"area": [
"钦南区",
"钦北区",
"灵山县",
"浦北县",
"其他"
]
},
{
"name": "贵港市",
"area": [
"港北区",
"港南区",
"覃塘区",
"桂平市",
"平南县",
"其他"
]
},
{
"name": "玉林市",
"area": [
"玉州区",
"北流市",
"容县",
"陆川县",
"博白县",
"兴业县",
"其他"
]
},
{
"name": "百色市",
"area": [
"右江区",
"凌云县",
"平果县",
"西林县",
"乐业县",
"德保县",
"田林县",
"田阳县",
"靖西县",
"田东县",
"那坡县",
"隆林各族自治县",
"其他"
]
},
{
"name": "贺州市",
"area": [
"八步区",
"钟山县",
"昭平县",
"富川瑶族自治县",
"其他"
]
},
{
"name": "河池市",
"area": [
"金城江区",
"宜州市",
"天峨县",
"凤山县",
"南丹县",
"东兰县",
"都安瑶族自治县",
"罗城仫佬族自治县",
"巴马瑶族自治县",
"环江毛南族自治县",
"大化瑶族自治县",
"其他"
]
},
{
"name": "来宾市",
"area": [
"兴宾区",
"合山市",
"象州县",
"武宣县",
"忻城县",
"金秀瑶族自治县",
"其他"
]
},
{
"name": "崇左市",
"area": [
"江州区",
"凭祥市",
"宁明县",
"扶绥县",
"龙州县",
"大新县",
"天等县",
"其他"
]
},
{
"name": "其他市",
"area": [
"其他"
]
}
]
},
{
"name": "海南省",
"city": [
{
"name": "海口市",
"area": [
"龙华区",
"秀英区",
"琼山区",
"美兰区",
"其他"
]
},
{
"name": "三亚市",
"area": [
"三亚市",
"其他"
]
},
{
"name": "五指山市",
"area": [
"五指山"
]
},
{
"name": "琼海市",
"area": [
"琼海"
]
},
{
"name": "儋州市",
"area": [
"儋州"
]
},
{
"name": "文昌市",
"area": [
"文昌"
]
},
{
"name": "万宁市",
"area": [
"万宁"
]
},
{
"name": "东方市",
"area": [
"东方"
]
},
{
"name": "澄迈县",
"area": [
"澄迈县"
]
},
{
"name": "定安县",
"area": [
"定安县"
]
},
{
"name": "屯昌县",
"area": [
"屯昌县"
]
},
{
"name": "临高县",
"area": [
"临高县"
]
},
{
"name": "白沙黎族自治县",
"area": [
"白沙黎族自治县"
]
},
{
"name": "昌江黎族自治县",
"area": [
"昌江黎族自治县"
]
},
{
"name": "乐东黎族自治县",
"area": [
"乐东黎族自治县"
]
},
{
"name": "陵水黎族自治县",
"area": [
"陵水黎族自治县"
]
},
{
"name": "保亭黎族苗族自治县",
"area": [
"保亭黎族苗族自治县"
]
},
{
"name": "琼中黎族苗族自治县",
"area": [
"琼中黎族苗族自治县"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "重庆市",
"city": [
{
"name": "重庆市",
"area": [
"渝中区",
"大渡口区",
"江北区",
"南岸区",
"北碚区",
"渝北区",
"巴南区",
"长寿区",
"双桥区",
"沙坪坝区",
"万盛区",
"万州区",
"涪陵区",
"黔江区",
"永川区",
"合川区",
"江津区",
"九龙坡区",
"南川区",
"綦江县",
"潼南县",
"荣昌县",
"璧山县",
"大足县",
"铜梁县",
"梁平县",
"开县",
"忠县",
"城口县",
"垫江县",
"武隆县",
"丰都县",
"奉节县",
"云阳县",
"巫溪县",
"巫山县",
"石柱土家族自治县",
"秀山土家族苗族自治县",
"酉阳土家族苗族自治县",
"彭水苗族土家族自治县",
"其他"
]
}
]
},
{
"name": "四川省",
"city": [
{
"name": "成都市",
"area": [
"青羊区",
"锦江区",
"金牛区",
"武侯区",
"成华区",
"龙泉驿区",
"青白江区",
"新都区",
"温江区",
"都江堰市",
"彭州市",
"邛崃市",
"崇州市",
"金堂县",
"郫县",
"新津县",
"双流县",
"蒲江县",
"大邑县",
"其他"
]
},
{
"name": "自贡市",
"area": [
"大安区",
"自流井区",
"贡井区",
"沿滩区",
"荣县",
"富顺县",
"其他"
]
},
{
"name": "攀枝花市",
"area": [
"仁和区",
"米易县",
"盐边县",
"东区",
"西区",
"其他"
]
},
{
"name": "泸州市",
"area": [
"江阳区",
"纳溪区",
"龙马潭区",
"泸县",
"合江县",
"叙永县",
"古蔺县",
"其他"
]
},
{
"name": "德阳市",
"area": [
"旌阳区",
"广汉市",
"什邡市",
"绵竹市",
"罗江县",
"中江县",
"其他"
]
},
{
"name": "绵阳市",
"area": [
"涪城区",
"游仙区",
"江油市",
"盐亭县",
"三台县",
"平武县",
"安县",
"梓潼县",
"北川羌族自治县",
"其他"
]
},
{
"name": "广元市",
"area": [
"元坝区",
"朝天区",
"青川县",
"旺苍县",
"剑阁县",
"苍溪县",
"市中区",
"其他"
]
},
{
"name": "遂宁市",
"area": [
"船山区",
"安居区",
"射洪县",
"蓬溪县",
"大英县",
"其他"
]
},
{
"name": "内江市",
"area": [
"市中区",
"东兴区",
"资中县",
"隆昌县",
"威远县",
"其他"
]
},
{
"name": "乐山市",
"area": [
"市中区",
"五通桥区",
"沙湾区",
"金口河区",
"峨眉山市",
"夹江县",
"井研县",
"犍为县",
"沐川县",
"马边彝族自治县",
"峨边彝族自治县",
"其他"
]
},
{
"name": "南充",
"area": [
"顺庆区",
"高坪区",
"嘉陵区",
"阆中市",
"营山县",
"蓬安县",
"仪陇县",
"南部县",
"西充县",
"其他"
]
},
{
"name": "眉山市",
"area": [
"东坡区",
"仁寿县",
"彭山县",
"洪雅县",
"丹棱县",
"青神县",
"其他"
]
},
{
"name": "宜宾市",
"area": [
"翠屏区",
"宜宾县",
"兴文县",
"南溪县",
"珙县",
"长宁县",
"高县",
"江安县",
"筠连县",
"屏山县",
"其他"
]
},
{
"name": "广安市",
"area": [
"广安区",
"华蓥市",
"岳池县",
"邻水县",
"武胜县",
"其他"
]
},
{
"name": "达州市",
"area": [
"通川区",
"万源市",
"达县",
"渠县",
"宣汉县",
"开江县",
"大竹县",
"其他"
]
},
{
"name": "雅安市",
"area": [
"雨城区",
"芦山县",
"石棉县",
"名山县",
"天全县",
"荥经县",
"宝兴县",
"汉源县",
"其他"
]
},
{
"name": "巴中市",
"area": [
"巴州区",
"南江县",
"平昌县",
"通江县",
"其他"
]
},
{
"name": "资阳市",
"area": [
"雁江区",
"简阳市",
"安岳县",
"乐至县",
"其他"
]
},
{
"name": "阿坝藏族羌族自治州",
"area": [
"马尔康县",
"九寨沟县",
"红原县",
"汶川县",
"阿坝县",
"理县",
"若尔盖县",
"小金县",
"黑水县",
"金川县",
"松潘县",
"壤塘县",
"茂县",
"其他"
]
},
{
"name": "甘孜藏族自治州",
"area": [
"康定县",
"丹巴县",
"炉霍县",
"九龙县",
"甘孜县",
"雅江县",
"新龙县",
"道孚县",
"白玉县",
"理塘县",
"德格县",
"乡城县",
"石渠县",
"稻城县",
"色达县",
"巴塘县",
"泸定县",
"得荣县",
"其他"
]
},
{
"name": "凉山彝族自治州",
"area": [
"西昌市",
"美姑县",
"昭觉县",
"金阳县",
"甘洛县",
"布拖县",
"雷波县",
"普格县",
"宁南县",
"喜德县",
"会东县",
"越西县",
"会理县",
"盐源县",
"德昌县",
"冕宁县",
"木里藏族自治县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "贵州省",
"city": [
{
"name": "贵阳市",
"area": [
"南明区",
"云岩区",
"花溪区",
"乌当区",
"白云区",
"小河区",
"清镇市",
"开阳县",
"修文县",
"息烽县",
"其他"
]
},
{
"name": "六盘水市",
"area": [
"钟山区",
"水城县",
"盘县",
"六枝特区",
"其他"
]
},
{
"name": "遵义市",
"area": [
"红花岗区",
"汇川区",
"赤水市",
"仁怀市",
"遵义县",
"绥阳县",
"桐梓县",
"习水县",
"凤冈县",
"正安县",
"余庆县",
"湄潭县",
"道真仡佬族苗族自治县",
"务川仡佬族苗族自治县",
"其他"
]
},
{
"name": "安顺市",
"area": [
"西秀区",
"普定县",
"平坝县",
"镇宁布依族苗族自治县",
"紫云苗族布依族自治县",
"关岭布依族苗族自治县",
"其他"
]
},
{
"name": "铜仁地区",
"area": [
"铜仁市",
"德江县",
"江口县",
"思南县",
"石阡县",
"玉屏侗族自治县",
"松桃苗族自治县",
"印江土家族苗族自治县",
"沿河土家族自治县",
"万山特区",
"其他"
]
},
{
"name": "毕节地区",
"area": [
"毕节市",
"黔西县",
"大方县",
"织金县",
"金沙县",
"赫章县",
"纳雍县",
"威宁彝族回族苗族自治县",
"其他"
]
},
{
"name": "黔西南布依族苗族自治州",
"area": [
"兴义市",
"望谟县",
"兴仁县",
"普安县",
"册亨县",
"晴隆县",
"贞丰县",
"安龙县",
"其他"
]
},
{
"name": "黔东南苗族侗族自治州",
"area": [
"凯里市",
"施秉县",
"从江县",
"锦屏县",
"镇远县",
"麻江县",
"台江县",
"天柱县",
"黄平县",
"榕江县",
"剑河县",
"三穗县",
"雷山县",
"黎平县",
"岑巩县",
"丹寨县",
"其他"
]
},
{
"name": "黔南布依族苗族自治州",
"area": [
"都匀市",
"福泉市",
"贵定县",
"惠水县",
"罗甸县",
"瓮安县",
"荔波县",
"龙里县",
"平塘县",
"长顺县",
"独山县",
"三都水族自治县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "云南省",
"city": [
{
"name": "昆明市",
"area": [
"盘龙区",
"五华区",
"官渡区",
"西山区",
"东川区",
"安宁市",
"呈贡县",
"晋宁县",
"富民县",
"宜良县",
"嵩明县",
"石林彝族自治县",
"禄劝彝族苗族自治县",
"寻甸回族彝族自治县",
"其他"
]
},
{
"name": "曲靖市",
"area": [
"麒麟区",
"宣威市",
"马龙县",
"沾益县",
"富源县",
"罗平县",
"师宗县",
"陆良县",
"会泽县",
"其他"
]
},
{
"name": "玉溪市",
"area": [
"红塔区",
"江川县",
"澄江县",
"通海县",
"华宁县",
"易门县",
"峨山彝族自治县",
"新平彝族傣族自治县",
"元江哈尼族彝族傣族自治县",
"其他"
]
},
{
"name": "保山市",
"area": [
"隆阳区",
"施甸县",
"腾冲县",
"龙陵县",
"昌宁县",
"其他"
]
},
{
"name": "昭通市",
"area": [
"昭阳区",
"鲁甸县",
"巧家县",
"盐津县",
"大关县",
"永善县",
"绥江县",
"镇雄县",
"彝良县",
"威信县",
"水富县",
"其他"
]
},
{
"name": "丽江市",
"area": [
"古城区",
"永胜县",
"华坪县",
"玉龙纳西族自治县",
"宁蒗彝族自治县",
"其他"
]
},
{
"name": "普洱市",
"area": [
"思茅区",
"普洱哈尼族彝族自治县",
"墨江哈尼族自治县",
"景东彝族自治县",
"景谷傣族彝族自治县",
"镇沅彝族哈尼族拉祜族自治县",
"江城哈尼族彝族自治县",
"孟连傣族拉祜族佤族自治县",
"澜沧拉祜族自治县",
"西盟佤族自治县",
"其他"
]
},
{
"name": "临沧市",
"area": [
"临翔区",
"凤庆县",
"云县",
"永德县",
"镇康县",
"双江拉祜族佤族布朗族傣族自治县",
"耿马傣族佤族自治县",
"沧源佤族自治县",
"其他"
]
},
{
"name": "德宏傣族景颇族自治州",
"area": [
"潞西市",
"瑞丽市",
"梁河县",
"盈江县",
"陇川县",
"其他"
]
},
{
"name": "怒江傈僳族自治州",
"area": [
"泸水县",
"福贡县",
"贡山独龙族怒族自治县",
"兰坪白族普米族自治县",
"其他"
]
},
{
"name": "迪庆藏族自治州",
"area": [
"香格里拉县",
"德钦县",
"维西傈僳族自治县",
"其他"
]
},
{
"name": "大理白族自治州",
"area": [
"大理市",
"祥云县",
"宾川县",
"弥渡县",
"永平县",
"云龙县",
"洱源县",
"剑川县",
"鹤庆县",
"漾濞彝族自治县",
"南涧彝族自治县",
"巍山彝族回族自治县",
"其他"
]
},
{
"name": "楚雄彝族自治州",
"area": [
"楚雄市",
"双柏县",
"牟定县",
"南华县",
"姚安县",
"大姚县",
"永仁县",
"元谋县",
"武定县",
"禄丰县",
"其他"
]
},
{
"name": "红河哈尼族彝族自治州",
"area": [
"蒙自县",
"个旧市",
"开远市",
"绿春县",
"建水县",
"石屏县",
"弥勒县",
"泸西县",
"元阳县",
"红河县",
"金平苗族瑶族傣族自治县",
"河口瑶族自治县",
"屏边苗族自治县",
"其他"
]
},
{
"name": "文山壮族苗族自治州",
"area": [
"文山县",
"砚山县",
"西畴县",
"麻栗坡县",
"马关县",
"丘北县",
"广南县",
"富宁县",
"其他"
]
},
{
"name": "西双版纳傣族自治州",
"area": [
"景洪市",
"勐海县",
"勐腊县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "西藏",
"city": [
{
"name": "拉萨市",
"area": [
"城关区",
"林周县",
"当雄县",
"尼木县",
"曲水县",
"堆龙德庆县",
"达孜县",
"墨竹工卡县",
"其他"
]
},
{
"name": "那曲地区",
"area": [
"那曲县",
"嘉黎县",
"比如县",
"聂荣县",
"安多县",
"申扎县",
"索县",
"班戈县",
"巴青县",
"尼玛县",
"其他"
]
},
{
"name": "昌都地区",
"area": [
"昌都县",
"江达县",
"贡觉县",
"类乌齐县",
"丁青县",
"察雅县",
"八宿县",
"左贡县",
"芒康县",
"洛隆县",
"边坝县",
"其他"
]
},
{
"name": "林芝地区",
"area": [
"林芝县",
"工布江达县",
"米林县",
"墨脱县",
"波密县",
"察隅县",
"朗县",
"其他"
]
},
{
"name": "山南地区",
"area": [
"乃东县",
"扎囊县",
"贡嘎县",
"桑日县",
"琼结县",
"曲松县",
"措美县",
"洛扎县",
"加查县",
"隆子县",
"错那县",
"浪卡子县",
"其他"
]
},
{
"name": "日喀则地区",
"area": [
"日喀则市",
"南木林县",
"江孜县",
"定日县",
"萨迦县",
"拉孜县",
"昂仁县",
"谢通门县",
"白朗县",
"仁布县",
"康马县",
"定结县",
"仲巴县",
"亚东县",
"吉隆县",
"聂拉木县",
"萨嘎县",
"岗巴县",
"其他"
]
},
{
"name": "阿里地区",
"area": [
"噶尔县",
"普兰县",
"札达县",
"日土县",
"革吉县",
"改则县",
"措勤县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "陕西省",
"city": [
{
"name": "西安市",
"area": [
"莲湖区",
"新城区",
"碑林区",
"雁塔区",
"灞桥区",
"未央区",
"阎良区",
"临潼区",
"长安区",
"高陵县",
"蓝田县",
"户县",
"周至县",
"其他"
]
},
{
"name": "铜川市",
"area": [
"耀州区",
"王益区",
"印台区",
"宜君县",
"其他"
]
},
{
"name": "宝鸡市",
"area": [
"渭滨区",
"金台区",
"陈仓区",
"岐山县",
"凤翔县",
"陇县",
"太白县",
"麟游县",
"扶风县",
"千阳县",
"眉县",
"凤县",
"其他"
]
},
{
"name": "咸阳市",
"area": [
"秦都区",
"渭城区",
"杨陵区",
"兴平市",
"礼泉县",
"泾阳县",
"永寿县",
"三原县",
"彬县",
"旬邑县",
"长武县",
"乾县",
"武功县",
"淳化县",
"其他"
]
},
{
"name": "渭南市",
"area": [
"临渭区",
"韩城市",
"华阴市",
"蒲城县",
"潼关县",
"白水县",
"澄城县",
"华县",
"合阳县",
"富平县",
"大荔县",
"其他"
]
},
{
"name": "延安市",
"area": [
"宝塔区",
"安塞县",
"洛川县",
"子长县",
"黄陵县",
"延川县",
"富县",
"延长县",
"甘泉县",
"宜川县",
"志丹县",
"黄龙县",
"吴起县",
"其他"
]
},
{
"name": "汉中市",
"area": [
"汉台区",
"留坝县",
"镇巴县",
"城固县",
"南郑县",
"洋县",
"宁强县",
"佛坪县",
"勉县",
"西乡县",
"略阳县",
"其他"
]
},
{
"name": "榆林市",
"area": [
"榆阳区",
"清涧县",
"绥德县",
"神木县",
"佳县",
"府谷县",
"子洲县",
"靖边县",
"横山县",
"米脂县",
"吴堡县",
"定边县",
"其他"
]
},
{
"name": "安康市",
"area": [
"汉滨区",
"紫阳县",
"岚皋县",
"旬阳县",
"镇坪县",
"平利县",
"石泉县",
"宁陕县",
"白河县",
"汉阴县",
"其他"
]
},
{
"name": "商洛市",
"area": [
"商州区",
"镇安县",
"山阳县",
"洛南县",
"商南县",
"丹凤县",
"柞水县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "甘肃省",
"city": [
{
"name": "兰州市",
"area": [
"城关区",
"七里河区",
"西固区",
"安宁区",
"红古区",
"永登县",
"皋兰县",
"榆中县",
"其他"
]
},
{
"name": "嘉峪关市",
"area": [
"嘉峪关市",
"其他"
]
},
{
"name": "金昌市",
"area": [
"金川区",
"永昌县",
"其他"
]
},
{
"name": "白银市",
"area": [
"白银区",
"平川区",
"靖远县",
"会宁县",
"景泰县",
"其他"
]
},
{
"name": "天水市",
"area": [
"清水县",
"秦安县",
"甘谷县",
"武山县",
"张家川回族自治县",
"北道区",
"秦城区",
"其他"
]
},
{
"name": "武威市",
"area": [
"凉州区",
"民勤县",
"古浪县",
"天祝藏族自治县",
"其他"
]
},
{
"name": "酒泉市",
"area": [
"肃州区",
"玉门市",
"敦煌市",
"金塔县",
"肃北蒙古族自治县",
"阿克塞哈萨克族自治县",
"安西县",
"其他"
]
},
{
"name": "张掖市",
"area": [
"甘州区",
"民乐县",
"临泽县",
"高台县",
"山丹县",
"肃南裕固族自治县",
"其他"
]
},
{
"name": "庆阳市",
"area": [
"西峰区",
"庆城县",
"环县",
"华池县",
"合水县",
"正宁县",
"宁县",
"镇原县",
"其他"
]
},
{
"name": "平凉市",
"area": [
"崆峒区",
"泾川县",
"灵台县",
"崇信县",
"华亭县",
"庄浪县",
"静宁县",
"其他"
]
},
{
"name": "定西市",
"area": [
"安定区",
"通渭县",
"临洮县",
"漳县",
"岷县",
"渭源县",
"陇西县",
"其他"
]
},
{
"name": "陇南市",
"area": [
"武都区",
"成县",
"宕昌县",
"康县",
"文县",
"西和县",
"礼县",
"两当县",
"徽县",
"其他"
]
},
{
"name": "临夏回族自治州",
"area": [
"临夏市",
"临夏县",
"康乐县",
"永靖县",
"广河县",
"和政县",
"东乡族自治县",
"积石山保安族东乡族撒拉族自治县",
"其他"
]
},
{
"name": "甘南藏族自治州",
"area": [
"合作市",
"临潭县",
"卓尼县",
"舟曲县",
"迭部县",
"玛曲县",
"碌曲县",
"夏河县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "青海省",
"city": [
{
"name": "西宁市",
"area": [
"城中区",
"城东区",
"城西区",
"城北区",
"湟源县",
"湟中县",
"大通回族土族自治县",
"其他"
]
},
{
"name": "海东地区",
"area": [
"平安县",
"乐都县",
"民和回族土族自治县",
"互助土族自治县",
"化隆回族自治县",
"循化撒拉族自治县",
"其他"
]
},
{
"name": "海北藏族自治州",
"area": [
"海晏县",
"祁连县",
"刚察县",
"门源回族自治县",
"其他"
]
},
{
"name": "海南藏族自治州",
"area": [
"共和县",
"同德县",
"贵德县",
"兴海县",
"贵南县",
"其他"
]
},
{
"name": "黄南藏族自治州",
"area": [
"同仁县",
"尖扎县",
"泽库县",
"河南蒙古族自治县",
"其他"
]
},
{
"name": "果洛藏族自治州",
"area": [
"玛沁县",
"班玛县",
"甘德县",
"达日县",
"久治县",
"玛多县",
"其他"
]
},
{
"name": "玉树藏族自治州",
"area": [
"玉树县",
"杂多县",
"称多县",
"治多县",
"囊谦县",
"曲麻莱县",
"其他"
]
},
{
"name": "海西蒙古族藏族自治州",
"area": [
"德令哈市",
"格尔木市",
"乌兰县",
"都兰县",
"天峻县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "宁夏",
"city": [
{
"name": "银川市",
"area": [
"兴庆区",
"西夏区",
"金凤区",
"灵武市",
"永宁县",
"贺兰县",
"其他"
]
},
{
"name": "石嘴山市",
"area": [
"大武口区",
"惠农区",
"平罗县",
"其他"
]
},
{
"name": "吴忠市",
"area": [
"利通区",
"青铜峡市",
"盐池县",
"同心县",
"其他"
]
},
{
"name": "固原市",
"area": [
"原州区",
"西吉县",
"隆德县",
"泾源县",
"彭阳县",
"其他"
]
},
{
"name": "中卫市",
"area": [
"沙坡头区",
"中宁县",
"海原县",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "新疆",
"city": [
{
"name": "乌鲁木齐市",
"area": [
"天山区",
"沙依巴克区",
"新市区",
"水磨沟区",
"头屯河区",
"达坂城区",
"东山区",
"乌鲁木齐县",
"其他"
]
},
{
"name": "克拉玛依市",
"area": [
"克拉玛依区",
"独山子区",
"白碱滩区",
"乌尔禾区",
"其他"
]
},
{
"name": "吐鲁番地区",
"area": [
"吐鲁番市",
"托克逊县",
"鄯善县",
"其他"
]
},
{
"name": "哈密地区",
"area": [
"哈密市",
"伊吾县",
"巴里坤哈萨克自治县",
"其他"
]
},
{
"name": "和田地区",
"area": [
"和田市",
"和田县",
"洛浦县",
"民丰县",
"皮山县",
"策勒县",
"于田县",
"墨玉县",
"其他"
]
},
{
"name": "阿克苏地区",
"area": [
"阿克苏市",
"温宿县",
"沙雅县",
"拜城县",
"阿瓦提县",
"库车县",
"柯坪县",
"新和县",
"乌什县",
"其他"
]
},
{
"name": "喀什地区",
"area": [
"喀什市",
"巴楚县",
"泽普县",
"伽师县",
"叶城县",
"岳普湖县",
"疏勒县",
"麦盖提县",
"英吉沙县",
"莎车县",
"疏附县",
"塔什库尔干塔吉克自治县",
"其他"
]
},
{
"name": "克孜勒苏柯尔克孜自治州",
"area": [
"阿图什市",
"阿合奇县",
"乌恰县",
"阿克陶县",
"其他"
]
},
{
"name": "巴音郭楞蒙古自治州",
"area": [
"库尔勒市",
"和静县",
"尉犁县",
"和硕县",
"且末县",
"博湖县",
"轮台县",
"若羌县",
"焉耆回族自治县",
"其他"
]
},
{
"name": "昌吉回族自治州",
"area": [
"昌吉市",
"阜康市",
"奇台县",
"玛纳斯县",
"吉木萨尔县",
"呼图壁县",
"木垒哈萨克自治县",
"米泉市",
"其他"
]
},
{
"name": "博尔塔拉蒙古自治州",
"area": [
"博乐市",
"精河县",
"温泉县",
"其他"
]
},
{
"name": "石河子",
"area": [
"石河子"
]
},
{
"name": "阿拉尔",
"area": [
"阿拉尔"
]
},
{
"name": "图木舒克",
"area": [
"图木舒克"
]
},
{
"name": "五家渠",
"area": [
"五家渠"
]
},
{
"name": "伊犁哈萨克自治州",
"area": [
"伊宁市",
"奎屯市",
"伊宁县",
"特克斯县",
"尼勒克县",
"昭苏县",
"新源县",
"霍城县",
"巩留县",
"察布查尔锡伯自治县",
"塔城地区",
"阿勒泰地区",
"其他"
]
},
{
"name": "其他",
"area": [
"其他"
]
}
]
},
{
"name": "台湾省",
"city": [
{
"name": "台北市",
"area": [
"内湖区",
"南港区",
"中正区",
"万华区",
"大同区",
"中山区",
"松山区",
"大安区",
"信义区",
"文山区",
"士林区",
"北投区"
]
},
{
"name": "新北市",
"area": [
"板桥区",
"汐止区",
"新店区",
"其他"
]
},
{
"name": "桃园市",
"area": [
"其他"
]
},
{
"name": "台中市",
"area": [
"其他"
]
},
{
"name": "台南市",
"area": [
"其他"
]
},
{
"name": "高雄市",
"area": [
"其他"
]
}
]
},
{
"name": "澳门",
"city": [
{
"name": "澳门",
"area": [
"花地玛堂区",
"圣安多尼堂区",
"大堂区",
"望德堂区",
"风顺堂区",
"嘉模堂区",
"圣方济各堂区",
"路凼",
"其他"
]
}
]
},
{
"name": "香港",
"city": [
{
"name": "香港",
"area": [
"深水埗区",
"油尖旺区",
"九龙城区",
"黄大仙区",
"观塘区",
"北区",
"大埔区",
"沙田区",
"西贡区",
"元朗区",
"屯门区",
"荃湾区",
"葵青区",
"离岛区",
"中西区",
"湾仔区",
"东区",
"南区",
"其他"
]
}
]
}
]
================================================
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/FragmentTestActivity.java
================================================
package com.bigkoo.pickerviewdemo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
public class FragmentTestActivity extends AppCompatActivity {
private FragmentManager mFragmentManager;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragmenttest);
mFragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frame_activity_main, new TestFragment());
fragmentTransaction.commitAllowingStateLoss();
}
}
================================================
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/GetJsonDataUtil.java
================================================
package com.bigkoo.pickerviewdemo;
import android.content.Context;
import android.content.res.AssetManager;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* <读取Json文件的工具类>
*
* @author: 小嵩
* @date: 2017/3/16 16:22
*/
public class GetJsonDataUtil {
public String getJson(Context context,String fileName) {
StringBuilder stringBuilder = new StringBuilder();
try {
AssetManager assetManager = context.getAssets();
BufferedReader bf = new BufferedReader(new InputStreamReader(
assetManager.open(fileName)));
String line;
while ((line = bf.readLine()) != null) {
stringBuilder.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return stringBuilder.toString();
}
}
================================================
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/JsonDataActivity.java
================================================
package com.bigkoo.pickerviewdemo;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
import com.bigkoo.pickerview.view.OptionsPickerView;
import com.bigkoo.pickerviewdemo.bean.JsonBean;
import com.google.gson.Gson;
import org.json.JSONArray;
import java.util.ArrayList;
import java.util.List;
/**
* 解析省市区数据示例
*
* @author 小嵩
* @date 2017-3-16
*/
public class JsonDataActivity extends AppCompatActivity implements View.OnClickListener {
private List<JsonBean> options1Items = new ArrayList<>();
private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();
private ArrayList<ArrayList<ArrayList<String>>> options3Items = new ArrayList<>();
private Thread thread;
private static final int MSG_LOAD_DATA = 0x0001;
private static final int MSG_LOAD_SUCCESS = 0x0002;
private static final int MSG_LOAD_FAILED = 0x0003;
private static boolean isLoaded = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_json_data);
initView();
}
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_LOAD_DATA:
if (thread == null) {//如果已创建就不再重新创建子线程了
Toast.makeText(JsonDataActivity.this, "Begin Parse Data", Toast.LENGTH_SHORT).show();
thread = new Thread(new Runnable() {
@Override
public void run() {
// 子线程中解析省市区数据
initJsonData();
}
});
thread.start();
}
break;
case MSG_LOAD_SUCCESS:
Toast.makeText(JsonDataActivity.this, "Parse Succeed", Toast.LENGTH_SHORT).show();
isLoaded = true;
break;
case MSG_LOAD_FAILED:
Toast.makeText(JsonDataActivity.this, "Parse Failed", Toast.LENGTH_SHORT).show();
break;
}
}
};
private void initView() {
findViewById(R.id.btn_data).setOnClickListener(this);
findViewById(R.id.btn_show).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_data:
mHandler.sendEmptyMessage(MSG_LOAD_DATA);
break;
case R.id.btn_show:
if (isLoaded) {
showPickerView();
} else {
Toast.makeText(JsonDataActivity.this, "Please waiting until the data is parsed", Toast.LENGTH_SHORT).show();
}
break;
}
}
private void showPickerView() {// 弹出选择器
OptionsPickerView pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
//返回的分别是三个级别的选中位置
String opt1tx = options1Items.size() > 0 ?
options1Items.get(options1).getPickerViewText() : "";
String opt2tx = options2Items.size() > 0
&& options2Items.get(options1).size() > 0 ?
options2Items.get(options1).get(options2) : "";
String opt3tx = options2Items.size() > 0
&& options3Items.get(options1).size() > 0
&& options3Items.get(options1).get(options2).size() > 0 ?
options3Items.get(options1).get(options2).get(options3) : "";
String tx = opt1tx + opt2tx + opt3tx;
Toast.makeText(JsonDataActivity.this, tx, Toast.LENGTH_SHORT).show();
}
})
.setTitleText("城市选择")
.setDividerColor(Color.BLACK)
.setTextColorCenter(Color.BLACK) //设置选中项文字颜色
.setContentTextSize(20)
.build();
/*pvOptions.setPicker(options1Items);//一级选择器
pvOptions.setPicker(options1Items, options2Items);//二级选择器*/
pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器
pvOptions.show();
}
private void initJsonData() {//解析数据
/**
* 注意:assets 目录下的Json文件仅供参考,实际使用可自行替换文件
* 关键逻辑在于循环体
*
* */
String JsonData = new GetJsonDataUtil().getJson(this, "province.json");//获取assets目录下的json文件数据
ArrayList<JsonBean> jsonBean = parseData(JsonData);//用Gson 转成实体
/**
* 添加省份数据
*
* 注意:如果是添加的JavaBean实体,则实体类需要实现 IPickerViewData 接口,
* PickerView会通过getPickerViewText方法获取字符串显示出来。
*/
options1Items = jsonBean;
for (int i = 0; i < jsonBean.size(); i++) {//遍历省份
ArrayList<String> cityList = new ArrayList<>();//该省的城市列表(第二级)
ArrayList<ArrayList<String>> province_AreaList = new ArrayList<>();//该省的所有地区列表(第三极)
for (int c = 0; c < jsonBean.get(i).getCityList().size(); c++) {//遍历该省份的所有城市
String cityName = jsonBean.get(i).getCityList().get(c).getName();
cityList.add(cityName);//添加城市
ArrayList<String> city_AreaList = new ArrayList<>();//该城市的所有地区列表
//如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃
/*if (jsonBean.get(i).getCityList().get(c).getArea() == null
|| jsonBean.get(i).getCityList().get(c).getArea().size() == 0) {
city_AreaList.add("");
} else {
city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
}*/
city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
province_AreaList.add(city_AreaList);//添加该省所有地区数据
}
/**
* 添加城市数据
*/
options2Items.add(cityList);
/**
* 添加地区数据
*/
options3Items.add(province_AreaList);
}
mHandler.sendEmptyMessage(MSG_LOAD_SUCCESS);
}
public ArrayList<JsonBean> parseData(String result) {//Gson 解析
ArrayList<JsonBean> detail = new ArrayList<>();
try {
JSONArray data = new JSONArray(result);
Gson gson = new Gson();
for (int i = 0; i < data.length(); i++) {
JsonBean entity = gson.fromJson(data.optJSONObject(i).toString(), JsonBean.class);
detail.add(entity);
}
} catch (Exception e) {
e.printStackTrace();
mHandler.sendEmptyMessage(MSG_LOAD_FAILED);
}
return detail;
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mHandler != null) {
mHandler.removeCallbacksAndMessages(null);
}
}
}
================================================
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.java
================================================
package com.bigkoo.pickerviewdemo;
import android.app.Dialog;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
import com.bigkoo.pickerview.builder.TimePickerBuilder;
import com.bigkoo.pickerview.listener.CustomListener;
import com.bigkoo.pickerview.listener.OnOptionsSelectChangeListener;
import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
import com.bigkoo.pickerview.listener.OnTimeSelectChangeListener;
import com.bigkoo.pickerview.listener.OnTimeSelectListener;
import com.bigkoo.pickerview.view.OptionsPickerView;
import com.bigkoo.pickerview.view.TimePickerView;
import com.bigkoo.pickerviewdemo.bean.CardBean;
import com.bigkoo.pickerviewdemo.bean.ProvinceBean;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ArrayList<ProvinceBean> options1Items = new ArrayList<>();
private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();
private Button btn_Options;
private Button btn_CustomOptions;
private Button btn_CustomTime;
private TimePickerView pvTime, pvCustomTime, pvCustomLunar;
private OptionsPickerView pvOptions, pvCustomOptions, pvNoLinkOptions;
private ArrayList<CardBean> cardItem = new ArrayList<>();
private ArrayList<String> food = new ArrayList<>();
private ArrayList<String> clothes = new ArrayList<>();
private ArrayList<String> computer = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//等数据加载完毕再初始化并显示Picker,以免还未加载完数据就显示,造成APP崩溃。
getOptionData();
initTimePicker();
initCustomTimePicker();
initLunarPicker();
initOptionPicker();
initCustomOptionPicker();
initNoLinkOptionsPicker();
Button btn_Time = (Button) findViewById(R.id.btn_Time);
btn_Options = (Button) findViewById(R.id.btn_Options);
btn_CustomOptions = (Button) findViewById(R.id.btn_CustomOptions);
btn_CustomTime = (Button) findViewById(R.id.btn_CustomTime);
Button btn_no_linkage = (Button) findViewById(R.id.btn_no_linkage);
Button btn_to_Fragment = (Button) findViewById(R.id.btn_fragment);
Button btn_circle = (Button) findViewById(R.id.btn_circle);
btn_Time.setOnClickListener(this);
btn_Options.setOnClickListener(this);
btn_CustomOptions.setOnClickListener(this);
btn_CustomTime.setOnClickListener(this);
btn_no_linkage.setOnClickListener(this);
btn_to_Fragment.setOnClickListener(this);
btn_circle.setOnClickListener(this);
findViewById(R.id.btn_GotoJsonData).setOnClickListener(this);
findViewById(R.id.btn_lunar).setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_Time && pvTime != null) {
// pvTime.setDate(Calendar.getInstance());
/* pvTime.show(); //show timePicker*/
pvTime.show(v);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view
} else if (v.getId() == R.id.btn_Options && pvOptions != null) {
pvOptions.show(); //弹出条件选择器
} else if (v.getId() == R.id.btn_CustomOptions && pvCustomOptions != null) {
pvCustomOptions.show(); //弹出自定义条件选择器
} else if (v.getId() == R.id.btn_CustomTime && pvCustomTime != null) {
pvCustomTime.show(); //弹出自定义时间选择器
} else if (v.getId() == R.id.btn_no_linkage && pvNoLinkOptions != null) {//不联动数据选择器
pvNoLinkOptions.show();
} else if (v.getId() == R.id.btn_GotoJsonData) {//跳转到 省市区解析示例页面
startActivity(new Intent(MainActivity.this, JsonDataActivity.class));
} else if (v.getId() == R.id.btn_fragment) {//跳转到 fragment
startActivity(new Intent(MainActivity.this, FragmentTestActivity.class));
} else if (v.getId() == R.id.btn_lunar) {
pvCustomLunar.show();
} else if (v.getId() == R.id.btn_circle) {
startActivity(new Intent(MainActivity.this, TestCircleWheelViewActivity.class));
}
}
/**
* 农历时间已扩展至 : 1900 - 2100年
*/
private void initLunarPicker() {
Calendar selectedDate = Calendar.getInstance();//系统当前时间
Calendar startDate = Calendar.getInstance();
startDate.set(2014, 1, 23);
Calendar endDate = Calendar.getInstance();
endDate.set(2069, 2, 28);
//时间选择器 ,自定义布局
pvCustomLunar = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {//选中事件回调
Toast.makeText(MainActivity.this, getTime(date), Toast.LENGTH_SHORT).show();
}
})
.setDate(selectedDate)
.setRangDate(startDate, endDate)
.setLayoutRes(R.layout.pickerview_custom_lunar, new CustomListener() {
@Override
public void customLayout(final View v) {
final TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish);
ImageView ivCancel = (ImageView) v.findViewById(R.id.iv_cancel);
tvSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvCustomLunar.returnData();
pvCustomLunar.dismiss();
}
});
ivCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvCustomLunar.dismiss();
}
});
//公农历切换
CheckBox cb_lunar = (CheckBox) v.findViewById(R.id.cb_lunar);
cb_lunar.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
pvCustomLunar.setLunarCalendar(!pvCustomLunar.isLunarCalendar());
//自适应宽
setTimePickerChildWeight(v, isChecked ? 0.8f : 1f, isChecked ? 1f : 1.1f);
}
});
}
/**
* 公农历切换后调整宽
* @param v
* @param yearWeight
* @param weight
*/
private void setTimePickerChildWeight(View v, float yearWeight, float weight) {
ViewGroup timePicker = (ViewGroup) v.findViewById(R.id.timepicker);
View year = timePicker.getChildAt(0);
LinearLayout.LayoutParams lp = ((LinearLayout.LayoutParams) year.getLayoutParams());
lp.weight = yearWeight;
year.setLayoutParams(lp);
for (int i = 1; i < timePicker.getChildCount(); i++) {
View childAt = timePicker.getChildAt(i);
LinearLayout.LayoutParams childLp = ((LinearLayout.LayoutParams) childAt.getLayoutParams());
childLp.weight = weight;
childAt.setLayoutParams(childLp);
}
}
})
.setType(new boolean[]{true, true, true, false, false, false})
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
.setDividerColor(Color.RED)
.build();
}
private void initTimePicker() {//Dialog 模式下,在底部弹出
pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {
Toast.makeText(MainActivity.this, getTime(date), Toast.LENGTH_SHORT).show();
Log.i("pvTime", "onTimeSelect");
}
})
.setTimeSelectChangeListener(new OnTimeSelectChangeListener() {
@Override
public void onTimeSelectChanged(Date date) {
Log.i("pvTime", "onTimeSelectChanged");
}
})
.setType(new boolean[]{true, true, true, true, true, true})
.isDialog(true) //默认设置false ,内部实现将DecorView 作为它的父控件。
.addOnCancelClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("pvTime", "onCancelClickListener");
}
})
.setItemVisibleCount(5) //若设置偶数,实际值会加1(比如设置6,则最大可见条目为7)
.setLineSpacingMultiplier(2.0f)
.isAlphaGradient(true)
.build();
Dialog mDialog = pvTime.getDialog();
if (mDialog != null) {
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
Gravity.BOTTOM);
params.leftMargin = 0;
params.rightMargin = 0;
pvTime.getDialogContainerLayout().setLayoutParams(params);
Window dialogWindow = mDialog.getWindow();
if (dialogWindow != null) {
dialogWindow.setWindowAnimations(com.bigkoo.pickerview.R.style.picker_view_slide_anim);//修改动画样式
dialogWindow.setGravity(Gravity.BOTTOM);//改成Bottom,底部显示
dialogWindow.setDimAmount(0.3f);
}
}
}
private void initCustomTimePicker() {
/**
* @description
*
* 注意事项:
* 1.自定义布局中,id为 optionspicker 或者 timepicker 的布局以及其子控件必须要有,否则会报空指针.
* 具体可参考demo 里面的两个自定义layout布局。
* 2.因为系统Calendar的月份是从0-11的,所以如果是调用Calendar的set方法来设置时间,月份的范围也要是从0-11
* setRangDate方法控制起始终止时间(如果不设置范围,则使用默认时间1900-2100年,此段代码可注释)
*/
Calendar selectedDate = Calendar.getInstance();//系统当前时间
Calendar startDate = Calendar.getInstance();
startDate.set(2014, 1, 23);
Calendar endDate = Calendar.getInstance();
endDate.set(2027, 2, 28);
//时间选择器 ,自定义布局
pvCustomTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {//选中事件回调
btn_CustomTime.setText(getTime(date));
}
})
/*.setType(TimePickerView.Type.ALL)//default is all
.setCancelText("Cancel")
.setSubmitText("Sure")
.setContentTextSize(18)
.setTitleSize(20)
.setTitleText("Title")
.setTitleColor(Color.BLACK)
/*.setDividerColor(Color.WHITE)//设置分割线的颜色
.setTextColorCenter(Color.LTGRAY)//设置选中项的颜色
.setLineSpacingMultiplier(1.6f)//设置两横线之间的间隔倍数
.setTitleBgColor(Color.DKGRAY)//标题背景颜色 Night mode
.setBgColor(Color.BLACK)//滚轮背景颜色 Night mode
.setSubmitColor(Color.WHITE)
.setCancelColor(Color.WHITE)*/
/*.animGravity(Gravity.RIGHT)// default is center*/
.setDate(selectedDate)
.setRangDate(startDate, endDate)
.setLayoutRes(R.layout.pickerview_custom_time, new CustomListener() {
@Override
public void customLayout(View v) {
final TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish);
ImageView ivCancel = (ImageView) v.findViewById(R.id.iv_cancel);
tvSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvCustomTime.returnData();
pvCustomTime.dismiss();
}
});
ivCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvCustomTime.dismiss();
}
});
}
})
.setContentTextSize(18)
.setType(new boolean[]{false, false, false, true, true, true})
.setLabel("年", "月", "日", "时", "分", "秒")
.setLineSpacingMultiplier(1.2f)
.setTextXOffset(0, 0, 0, 40, 0, -40)
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
.setDividerColor(0xFF24AD9D)
.build();
}
private void initOptionPicker() {//条件选择器初始化
/**
* 注意 :如果是三级联动的数据(省市区等),请参照 JsonDataActivity 类里面的写法。
*/
pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
//返回的分别是三个级别的选中位置
String tx = options1Items.get(options1).getPickerViewText()
+ options2Items.get(options1).get(options2)
/* + options3Items.get(options1).get(options2).get(options3).getPickerViewText()*/;
btn_Options.setText(tx);
}
})
.setTitleText("城市选择")
.setContentTextSize(20)//设置滚轮文字大小
.setDividerColor(Color.LTGRAY)//设置分割线的颜色
.setSelectOptions(0, 1)//默认选中项
.setBgColor(Color.BLACK)
.setTitleBgColor(Color.DKGRAY)
.setTitleColor(Color.LTGRAY)
.setCancelColor(Color.YELLOW)
.setSubmitColor(Color.YELLOW)
.setTextColorCenter(Color.LTGRAY)
.isRestoreItem(true)//切换时是否还原,设置默认选中第一项。
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
.setLabels("省", "市", "区")
.setOutSideColor(0x00000000) //设置外部遮罩颜色
.setOptionsSelectChangeListener(new OnOptionsSelectChangeListener() {
@Override
public void onOptionsSelectChanged(int options1, int options2, int options3) {
String str = "options1: " + options1 + "\noptions2: " + options2 + "\noptions3: " + options3;
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
}
})
.build();
// pvOptions.setSelectOptions(1,1);
/*pvOptions.setPicker(options1Items);//一级选择器*/
pvOptions.setPicker(options1Items, options2Items);//二级选择器
/*pvOptions.setPicker(options1Items, options2Items,options3Items);//三级选择器*/
}
private void initCustomOptionPicker() {//条件选择器初始化,自定义布局
/**
* @description
*
* 注意事项:
* 自定义布局中,id为 optionspicker 或者 timepicker 的布局以及其子控件必须要有,否则会报空指针。
* 具体可参考demo 里面的两个自定义layout布局。
*/
pvCustomOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3, View v) {
//返回的分别是三个级别的选中位置
String tx = cardItem.get(options1).getPickerViewText();
btn_CustomOptions.setText(tx);
}
})
.setLayoutRes(R.layout.pickerview_custom_options, new CustomListener() {
@Override
public void customLayout(View v) {
final TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish);
final TextView tvAdd = (TextView) v.findViewById(R.id.tv_add);
ImageView ivCancel = (ImageView) v.findViewById(R.id.iv_cancel);
tvSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvCustomOptions.returnData();
pvCustomOptions.dismiss();
}
});
ivCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvCustomOptions.dismiss();
}
});
tvAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getCardData();
pvCustomOptions.setPicker(cardItem);
}
});
}
})
.isDialog(true)
.setOutSideCancelable(false)
.build();
pvCustomOptions.setPicker(cardItem);//添加数据
}
private void initNoLinkOptionsPicker() {// 不联动的多级选项
pvNoLinkOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
String str = "food:" + food.get(options1)
+ "\nclothes:" + clothes.get(options2)
+ "\ncomputer:" + computer.get(options3);
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
}
})
.setOptionsSelectChangeListener(new OnOptionsSelectChangeListener() {
@Override
public void onOptionsSelectChanged(int options1, int options2, int options3) {
String str = "options1: " + options1 + "\noptions2: " + options2 + "\noptions3: " + options3;
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
}
})
.setItemVisibleCount(5)
// .setSelectOptions(0, 1, 1)
.build();
pvNoLinkOptions.setNPicker(food, clothes, computer);
pvNoLinkOptions.setSelectOptions(0, 1, 1);
}
private String getTime(Date date) {//可根据需要自行截取数据显示
Log.d("getTime()", "choice date millis: " + date.getTime());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return format.format(date);
}
private void getOptionData() {
/*
* 注意:如果是添加JavaBean实体数据,则实体类需要实现 IPickerViewData 接口,
* PickerView会通过getPickerViewText方法获取字符串显示出来。
*/
getCardData();
getNoLinkData();
//选项1
options1Items.add(new ProvinceBean(0, "广东", "描述部分", "其他数据"));
options1Items.add(new ProvinceBean(1, "湖南", "描述部分", "其他数据"));
options1Items.add(new ProvinceBean(2, "广西", "描述部分", "其他数据"));
//选项2
ArrayList<String> options2Items_01 = new ArrayList<>();
options2Items_01.add("广州");
options2Items_01.add("佛山");
options2Items_01.add("东莞");
options2Items_01.add("珠海");
ArrayList<String> options2Items_02 = new ArrayList<>();
options2Items_02.add("长沙");
options2Items_02.add("岳阳");
options2Items_02.add("株洲");
options2Items_02.add("衡阳");
ArrayList<String> options2Items_03 = new ArrayList<>();
options2Items_03.add("桂林");
options2Items_03.add("玉林");
options2Items.add(options2Items_01);
options2Items.add(options2Items_02);
options2Items.add(options2Items_03);
/*--------数据源添加完毕---------*/
}
private void getCardData() {
for (int i = 0; i < 5; i++) {
cardItem.add(new CardBean(i, "No.ABC12345 " + i));
}
for (int i = 0; i < cardItem.size(); i++) {
if (cardItem.get(i).getCardNo().length() > 6) {
String str_item = cardItem.get(i).getCardNo().substring(0, 6) + "...";
cardItem.get(i).setCardNo(str_item);
}
}
}
private void getNoLinkData() {
food.add("KFC");
food.add("MacDonald");
food.add("Pizza hut");
clothes.add("Nike");
clothes.add("Adidas");
clothes.add("Armani");
computer.add("ASUS");
computer.add("Lenovo");
computer.add("Apple");
computer.add("HP");
}
}
================================================
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/TestCircleWheelViewActivity.java
================================================
package com.bigkoo.pickerviewdemo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
import com.bigkoo.pickerview.adapter.ArrayWheelAdapter;
import com.contrarywind.listener.OnItemSelectedListener;
import com.contrarywind.view.WheelView;
import java.util.ArrayList;
import java.util.List;
/**
* desc:
* author: Created by lixiaotong on 2019-07-30
* e-mail: 516030811@qq.com
*/
public class TestCircleWheelViewActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_circle_wheelview);
WheelView wheelView = findViewById(R.id.wheelview);
wheelView.setTextSize(20);
wheelView.setLineSpacingMultiplier(2f);
// wheelView.setDividerWidth(6);
wheelView.setDividerType(WheelView.DividerType.CIRCLE);
final List<String> mOptionsItems = new ArrayList<>();
mOptionsItems.add("10");
mOptionsItems.add("20");
mOptionsItems.add("30");
mOptionsItems.add("40");
mOptionsItems.add("50");
mOptionsItems.add("60");
mOptionsItems.add("70");
wheelView.setAdapter(new ArrayWheelAdapter(mOptionsItems));
wheelView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(int index) {
Toast.makeText(TestCircleWheelViewActivity.this, "" + mOptionsItems.get(index), Toast.LENGTH_SHORT).show();
}
});
}
}
================================================
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/TestFragment.java
================================================
package com.bigkoo.pickerviewdemo;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.bigkoo.pickerview.builder.TimePickerBuilder;
import com.bigkoo.pickerview.listener.CustomListener;
import com.bigkoo.pickerview.listener.OnTimeSelectListener;
import com.bigkoo.pickerview.view.TimePickerView;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TestFragment extends Fragment implements View.OnClickListener {
private View mView;
private Button btnShow;
private TimePickerView pvTime;
private FrameLayout mFrameLayout;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.fragment_test, null);
return mView;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
btnShow = (Button) mView.findViewById(R.id.btn_show);
btnShow.setOnClickListener(this);
mFrameLayout = (FrameLayout) mView.findViewById(R.id.fragmen_fragment);
initTimePicker();
}
private void initTimePicker() {
//控制时间范围(如果不设置范围,则使用默认时间1900-2100年,此段代码可注释)
//因为系统Calendar的月份是从0-11的,所以如果是调用Calendar的set方法来设置时间,月份的范围也要是从0-11
Calendar selectedDate = Calendar.getInstance();
Calendar startDate = Calendar.getInstance();
startDate.set(2013, 0, 23);
Calendar endDate = Calendar.getInstance();
endDate.set(2019, 11, 28);
//时间选择器
pvTime = new TimePickerBuilder(getActivity(), new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {//选中事件回调
// 这里回调过来的v,就是show()方法里面所添加的 View 参数,如果show的时候没有添加参数,v则为null
/*btn_Time.setText(getTime(date));*/
Button btn = (Button) v;
btn.setText(getTime(date));
}
})
.setLayoutRes(R.layout.pickerview_custom_time, new CustomListener() {
@Override
public void customLayout(View v) {
final TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish);
ImageView ivCancel = (ImageView) v.findViewById(R.id.iv_cancel);
tvSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvTime.returnData();
/*pvTime.dismiss();*/
}
});
ivCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*pvTime.dismiss();*/
}
});
}
})
.setType(new boolean[]{true, true, true, false, false, false})
.setLabel("", "", "", "", "", "") //设置空字符串以隐藏单位提示 hide label
.setDividerColor(Color.DKGRAY)
.setContentTextSize(20)
.setDate(selectedDate)
.setRangDate(startDate, selectedDate)
.setDecorView(mFrameLayout)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中
.setOutSideColor(0x00000000)
.setOutSideCancelable(false)
.build();
pvTime.setKeyBackCancelable(false);//系统返回键监听屏蔽掉
}
@Override
public void onClick(View v) {
pvTime.show(v, false);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view
}
private String getTime(Date date) {//可根据需要自行截取数据显示
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return format.format(date);
}
}
================================================
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/bean/CardBean.java
================================================
package com.bigkoo.pickerviewdemo.bean;
import com.contrarywind.interfaces.IPickerViewData;
/**
* Created by KyuYi on 2017/3/2.
* E-Mail:kyu_yi@sina.com
* 功能:
*/
public class CardBean implements IPickerViewData {
int id;
String cardNo;
public CardBean(int id, String cardNo) {
this.id = id;
this.cardNo = cardNo;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCardNo() {
return cardNo;
}
public void setCardNo(String cardNo) {
this.cardNo = cardNo;
}
@Override
public String getPickerViewText() {
return cardNo;
}
}
================================================
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/bean/JsonBean.java
================================================
package com.bigkoo.pickerviewdemo.bean;
import com.contrarywind.interfaces.IPickerViewData;
import java.util.List;
/**
* TODO<json数据源>
*
* @author: 小嵩
* @date: 2017/3/16 15:36
*/
public class JsonBean implements IPickerViewData {
/**
* name : 省份
* city : [{"name":"北京市","area":["东城区","西城区","崇文区","宣武区","朝阳区"]}]
*/
private String name;
private List<CityBean> city;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<CityBean> getCityList() {
return city;
}
public void setCityList(List<CityBean> city) {
this.city = city;
}
// 实现 IPickerViewData 接口,
// 这个用来显示在PickerView上面的字符串,
// PickerView会通过IPickerViewData获取getPickerViewText方法显示出来。
@Override
public String getPickerViewText() {
return this.name;
}
public static class CityBean {
/**
* name : 城市
* area : ["东城区","西城区","崇文区","昌平区"]
*/
private String name;
private List<String> area;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getArea() {
return area;
}
public void setArea(List<String> area) {
this.area = area;
}
}
}
================================================
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/bean/ProvinceBean.java
================================================
package com.bigkoo.pickerviewdemo.bean;
import com.contrarywind.interfaces.IPickerViewData;
/**
* Created by Sai on 15/11/22.
*/
public class ProvinceBean implements IPickerViewData {
private long id;
private String name;
private String description;
private String others;
public ProvinceBean(long id,String name,String description,String others){
this.id = id;
this.name = name;
this.description = description;
this.others = others;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getOthers() {
return others;
}
public void setOthers(String others) {
this.others = others;
}
//这个用来显示在PickerView上面的字符串,PickerView会通过getPickerViewText方法获取字符串显示出来。
@Override
public String getPickerViewText() {
return name;
}
}
================================================
FILE: app/src/main/res/layout/activity_fragmenttest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frame_activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
================================================
FILE: app/src/main/res/layout/activity_json_data.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_json_data"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<Button
android:id="@+id/btn_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/picker_text_parse"/>
<Button
android:id="@+id/btn_show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/picker_text_show"
android:layout_marginTop="@dimen/activity_horizontal_margin" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_main.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_lunar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="10dp"
android:text="@string/picker_custom_lunar" />
<Button
android:id="@+id/btn_Time"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="10dp"
android:text="@string/picker_time" />
<Button
android:id="@+id/btn_Options"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/tvTime"
android:layout_margin="10dp"
android:text="@string/picker_province" />
<Button
android:id="@+id/btn_CustomTime"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/tvTime"
android:layout_margin="10dp"
android:text="@string/picker_custom_time" />
<Button
android:id="@+id/btn_CustomOptions"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/tvTime"
android:layout_margin="10dp"
android:text="@string/picker_custom_province" />
<Button
android:id="@+id/btn_no_linkage"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/tvTime"
android:layout_margin="10dp"
android:text="@string/picker_non_linkage" />
<Button
android:id="@+id/btn_GotoJsonData"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/tvTime"
android:layout_margin="10dp"
android:text="@string/picker_json_parse_sample" />
<Button
android:id="@+id/btn_fragment"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/tvTime"
android:layout_margin="10dp"
android:text="@string/picker_custom_parent" />
<Button
android:id="@+id/btn_circle"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="10dp"
android:text="@string/picker_use_circle_divider" />
</LinearLayout>
</ScrollView>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_test_circle_wheelview.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.contrarywind.view.WheelView xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/wheelview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
app:wheelview_dividerWidth="2dp" />
</RelativeLayout>
================================================
FILE: app/src/main/res/layout/fragment_test.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_show"
android:layout_margin="10dp"
android:layout_below="@+id/tvTime"
android:text="显示时间选择器"
android:layout_width="match_parent"
android:layout_height="50dp"/>
<FrameLayout
android:id="@+id/fragmen_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/pickerview_custom_lunar.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#EEEEEE">
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#aaa" />
<ImageView
android:id="@+id/iv_cancel"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_centerVertical="true"
android:layout_marginLeft="17dp"
android:padding="8dp"
android:src="@drawable/to_down" />
<CheckBox
android:id="@+id/cb_lunar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginRight="17dp"
android:text="农历"
android:textColor="#24AD9D"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_finish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="17dp"
android:padding="8dp"
android:text="完成"
android:textColor="#24AD9D"
android:textSize="18sp" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#aaa" />
</RelativeLayout>
<!--此部分需要完整复制过去,删减或者更改ID会导致初始化找不到内容而报空-->
<LinearLayout
android:id="@+id/timepicker"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:gravity="center"
android:minHeight="150dp"
android:orientation="horizontal">
<com.contrarywind.view.WheelView
android:id="@+id/year"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<com.contrarywind.view.WheelView
android:id="@+id/month"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.1" />
<com.contrarywind.view.WheelView
android:id="@+id/day"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.1" />
<com.contrarywind.view.WheelView
android:id="@+id/hour"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.1" />
<com.contrarywind.view.WheelView
android:id="@+id/min"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.1" />
<com.contrarywind.view.WheelView
android:id="@+id/second"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.1" />
</LinearLayout>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/pickerview_custom_options.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#EEEEEE">
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#aaa" />
<ImageView
android:id="@+id/iv_cancel"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_centerVertical="true"
android:layout_marginLeft="17dp"
android:padding="8dp"
android:src="@drawable/to_down" />
<TextView
android:id="@+id/tv_finish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="17dp"
android:padding="8dp"
android:text="完成"
android:textColor="#24AD9D"
android:textSize="18sp" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#aaa" />
</RelativeLayout>
<!--此部分需要完整复制过去,删减或者更改ID会导致初始化找不到内容而报空-->
<LinearLayout
android:id="@+id/optionspicker"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="150dp"
android:gravity="center"
android:background="@android:color/white"
android:orientation="horizontal">
<com.contrarywind.view.WheelView
android:id="@+id/options1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<com.contrarywind.view.WheelView
android:id="@+id/options2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<com.contrarywind.view.WheelView
android:id="@+id/options3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#24ad9d" />
<TextView
android:id="@+id/tv_add"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#E5E9EC"
android:gravity="center"
android:text="+ 添加加油卡"
android:textColor="#24AD9D"
android:textSize="18sp" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/pickerview_custom_time.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#EEEEEE">
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#aaa" />
<ImageView
android:id="@+id/iv_cancel"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_centerVertical="true"
android:layout_marginLeft="17dp"
android:padding="8dp"
android:src="@drawable/to_down" />
<TextView
android:id="@+id/tv_finish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="17dp"
android:padding="8dp"
android:text="完成"
android:textColor="#24AD9D"
android:textSize="18sp" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#aaa" />
</RelativeLayout>
<!--此部分需要完整复制过去,删减或者更改ID会导致初始化找不到内容而报空-->
<LinearLayout
android:id="@+id/timepicker"
android:minHeight="150dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:gravity="center"
android:orientation="horizontal">
<com.contrarywind.view.WheelView
android:id="@+id/year"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<com.contrarywind.view.WheelView
android:id="@+id/month"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.1" />
<com.contrarywind.view.WheelView
android:id="@+id/day"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.1" />
<com.contrarywind.view.WheelView
android:id="@+id/hour"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.1" />
<com.contrarywind.view.WheelView
android:id="@+id/min"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.1" />
<com.contrarywind.view.WheelView
android:id="@+id/second"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.1" />
</LinearLayout>
</LinearLayout>
================================================
FILE: app/src/main/res/menu/menu_main.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
<item android:id="@+id/action_settings" android:title="@string/action_settings"
android:orderInCategory="100" app:showAsAction="never" />
</menu>
================================================
FILE: app/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
================================================
FILE: app/src/main/res/values/dimens.xml
================================================
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
</resources>
================================================
FILE: app/src/main/res/values/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">PickerViewDemo</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="picker_text_parse">解析数据</string>
<string name="picker_text_show">显示省市区选择器</string>
<string name="picker_custom_lunar">公农历切换</string>
<string name="picker_time">时间选择器</string>
<string name="picker_province">条件选择器</string>
<string name="picker_custom_time">时间选择器自定义布局</string>
<string name="picker_custom_province">条件选择器自定义布局</string>
<string name="picker_custom_parent">自定义父容器</string>
<string name="picker_use_circle_divider">使用圆形分割线</string>
<string name="picker_non_linkage">条件选择器(不联动)</string>
<string name="picker_json_parse_sample">省市区Json文件解析示例</string>
</resources>
================================================
FILE: app/src/main/res/values/styles.xml
================================================
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
================================================
FILE: app/src/main/res/values-en/strings.xml
================================================
<resources>
<string name="picker_custom_lunar">LunarTimePicker</string>
<string name="picker_time">TimePicker</string>
<string name="picker_province">OptionsPicker</string>
<string name="picker_custom_time">CustomLayoutTimePicker</string>
<string name="picker_custom_province">CustomLayoutOptionsPicker</string>
<string name="picker_custom_parent">CustomParentView</string>
<string name="picker_non_linkage">OptionsPicker(Non-Linkage)</string>
<string name="picker_json_parse_sample">AreaDataParseSample</string>
<string name="picker_text_parse">Parse Data</string>
<string name="picker_text_show">Show OptionsPicker</string>
</resources>
================================================
FILE: app/src/main/res/values-w820dp/dimens.xml
================================================
<resources>
<!-- Example customization of dimensions originally defined in res/values/dimens.xml
(such as screen margins) for screens with more than 820dp of available width. This
would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
<dimen name="activity_horizontal_margin">64dp</dimen>
</resources>
================================================
FILE: build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
maven {
url 'https://maven.google.com/'
name 'Google'
}
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.1'
// classpath "com.novoda:bintray-release:0.9.1"
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
#Mon Oct 14 15:15:59 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
================================================
FILE: gradle.properties
================================================
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
================================================
FILE: gradlew
================================================
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
================================================
FILE: gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: pickerview/.gitignore
================================================
/build
================================================
FILE: pickerview/build.gradle
================================================
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
//apply plugin: 'com.novoda.bintray-release'//添加JCenter插件
android {
compileSdkVersion 26
defaultConfig {
minSdkVersion 14
targetSdkVersion 26
versionCode 34
versionName "4.1.9"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
//allprojects {
// tasks.withType(Javadoc) {//兼容中文字符
// options{
// encoding "UTF-8"
// charSet 'UTF-8'
// links "http://docs.oracle.com/javase/7/docs/api"
// }
// }
//}
//publish {
// userOrg = 'contrarywind'//bintray.com 用户名/组织名 user/org name
// groupId = 'com.contrarywind'//JCenter上显示的路径 path
// artifactId = 'Android-PickerView'//项目名称 project name
// publishVersion = '4.1.9'//版本号 version code
// desc = 'this is a pickerview for android'//项目描述 description
// website = 'https://github.com/Bigkoo/Android-PickerView' //项目网址链接 link
//}
dependencies {
// compile fileTree(include: ['*.jar'], dir: 'libs')
api project(path: ':wheelview')
// api 'com.contrarywind:wheelview:4.1.0'
implementation 'com.android.support:support-annotations:28.0.0'
}
================================================
FILE: pickerview/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/Sai/Documents/software/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
================================================
FILE: pickerview/src/androidTest/java/com/bigkoo/pickerview/ApplicationTest.java
================================================
package com.bigkoo.pickerview;
import android.app.Application;
import android.test.ApplicationTestCase;
/**
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
*/
public class ApplicationTest extends ApplicationTestCase<Application> {
public ApplicationTest() {
super(Application.class);
}
}
================================================
FILE: pickerview/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bigkoo.pickerview">
</manifest>
================================================
FILE: pickerview/src/main/java/com/bigkoo/pickerview/adapter/ArrayWheelAdapter.java
================================================
package com.bigkoo.pickerview.adapter;
import com.contrarywind.adapter.WheelAdapter;
import java.util.List;
/**
* The simple Array wheel adapter
* @param <T> the element type
*/
public class ArrayWheelAdapter<T> implements WheelAdapter {
// items
private List<T> items;
/**
* Constructor
* @param items the items
*/
public ArrayWheelAdapter(List<T> items) {
this.items = items;
}
@Override
public Object getItem(int index) {
if (index >= 0 && index < items.size()) {
return items.get(index);
}
return "";
}
@Override
public int getItemsCount() {
return items.size();
}
@Override
public int indexOf(Object o){
return items.indexOf(o);
}
}
================================================
FILE: pickerview/src/main/java/com/bigkoo/pickerview/adapter/NumericWheelAdapter.java
================================================
package com.bigkoo.pickerview.adapter;
import com.contrarywind.adapter.WheelAdapter;
/**
* Numeric Wheel adapter.
*/
public class NumericWheelAdapter implements WheelAdapter {
private int minValue;
private int maxValue;
/**
* Constructor
* @param minValue the wheel min value
* @param maxValue the wheel max value
*/
public NumericWheelAdapter(int minValue, int maxValue) {
this.minValue = minValue;
this.maxValue = maxValue;
}
@Override
public Object getItem(int index) {
if (index >= 0 && index < getItemsCount()) {
int value = minValue + index;
return value;
}
return 0;
}
@Override
public int getItemsCount() {
return maxValue - minValue + 1;
}
@Override
public int indexOf(Object o){
try {
return (int)o - minValue;
} catch (Exception e) {
return -1;
}
}
}
================================================
FILE: pickerview/src/main/java/com/bigkoo/pickerview/builder/OptionsPickerBuilder.java
================================================
package com.bigkoo.pickerview.builder;
import android.content.Context;
import android.graphics.Typeface;
import android.support.annotation.ColorInt;
import android.view.View;
import android.view.ViewGroup;
import com.bigkoo.pickerview.configure.PickerOptions;
import com.bigkoo.pickerview.listener.CustomListener;
import com.bigkoo.pickerview.listener.OnOptionsSelectChangeListener;
import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
import com.bigkoo.pickerview.view.OptionsP
gitextract_oqq9ulpw/
├── .gitignore
├── LICENSE
├── README-en.md
├── README.md
├── app/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── com/
│ │ └── bigkoo/
│ │ └── pickerviewdemo/
│ │ └── ApplicationTest.java
│ └── main/
│ ├── AndroidManifest.xml
│ ├── assets/
│ │ └── province.json
│ ├── java/
│ │ └── com/
│ │ └── bigkoo/
│ │ └── pickerviewdemo/
│ │ ├── FragmentTestActivity.java
│ │ ├── GetJsonDataUtil.java
│ │ ├── JsonDataActivity.java
│ │ ├── MainActivity.java
│ │ ├── TestCircleWheelViewActivity.java
│ │ ├── TestFragment.java
│ │ └── bean/
│ │ ├── CardBean.java
│ │ ├── JsonBean.java
│ │ └── ProvinceBean.java
│ └── res/
│ ├── layout/
│ │ ├── activity_fragmenttest.xml
│ │ ├── activity_json_data.xml
│ │ ├── activity_main.xml
│ │ ├── activity_test_circle_wheelview.xml
│ │ ├── fragment_test.xml
│ │ ├── pickerview_custom_lunar.xml
│ │ ├── pickerview_custom_options.xml
│ │ └── pickerview_custom_time.xml
│ ├── menu/
│ │ └── menu_main.xml
│ ├── values/
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── values-en/
│ │ └── strings.xml
│ └── values-w820dp/
│ └── dimens.xml
├── build.gradle
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── pickerview/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── com/
│ │ └── bigkoo/
│ │ └── pickerview/
│ │ └── ApplicationTest.java
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── bigkoo/
│ │ └── pickerview/
│ │ ├── adapter/
│ │ │ ├── ArrayWheelAdapter.java
│ │ │ └── NumericWheelAdapter.java
│ │ ├── builder/
│ │ │ ├── OptionsPickerBuilder.java
│ │ │ └── TimePickerBuilder.java
│ │ ├── configure/
│ │ │ └── PickerOptions.java
│ │ ├── listener/
│ │ │ ├── CustomListener.java
│ │ │ ├── ISelectTimeCallback.java
│ │ │ ├── OnDismissListener.java
│ │ │ ├── OnOptionsSelectChangeListener.java
│ │ │ ├── OnOptionsSelectListener.java
│ │ │ ├── OnTimeSelectChangeListener.java
│ │ │ └── OnTimeSelectListener.java
│ │ ├── utils/
│ │ │ ├── ChinaDate.java
│ │ │ ├── LunarCalendar.java
│ │ │ └── PickerViewAnimateUtil.java
│ │ └── view/
│ │ ├── BasePickerView.java
│ │ ├── OptionsPickerView.java
│ │ ├── TimePickerView.java
│ │ ├── WheelOptions.java
│ │ └── WheelTime.java
│ └── res/
│ ├── anim/
│ │ ├── pickerview_dialog_scale_in.xml
│ │ ├── pickerview_dialog_scale_out.xml
│ │ ├── pickerview_slide_in_bottom.xml
│ │ └── pickerview_slide_out_bottom.xml
│ ├── drawable/
│ │ └── selector_pickerview_btn.xml
│ ├── layout/
│ │ ├── include_pickerview_topbar.xml
│ │ ├── layout_basepickerview.xml
│ │ ├── pickerview_options.xml
│ │ └── pickerview_time.xml
│ ├── values/
│ │ ├── dimens.xml
│ │ ├── integers.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-en/
│ └── strings.xml
├── settings.gradle
└── wheelview/
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src/
├── androidTest/
│ └── java/
│ └── test/
│ └── wheelview/
│ └── ExampleInstrumentedTest.java
└── main/
├── AndroidManifest.xml
├── java/
│ └── com/
│ └── contrarywind/
│ ├── adapter/
│ │ └── WheelAdapter.java
│ ├── interfaces/
│ │ └── IPickerViewData.java
│ ├── listener/
│ │ ├── LoopViewGestureListener.java
│ │ └── OnItemSelectedListener.java
│ ├── timer/
│ │ ├── InertiaTimerTask.java
│ │ ├── MessageHandler.java
│ │ └── SmoothScrollTimerTask.java
│ └── view/
│ └── WheelView.java
└── res/
└── values/
├── attrs.xml
├── colors.xml
├── dimens.xml
└── strings.xml
SYMBOL INDEX (388 symbols across 40 files)
FILE: app/src/androidTest/java/com/bigkoo/pickerviewdemo/ApplicationTest.java
class ApplicationTest (line 9) | public class ApplicationTest extends ApplicationTestCase<Application> {
method ApplicationTest (line 10) | public ApplicationTest() {
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/FragmentTestActivity.java
class FragmentTestActivity (line 10) | public class FragmentTestActivity extends AppCompatActivity {
method onCreate (line 13) | @Override
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/GetJsonDataUtil.java
class GetJsonDataUtil (line 18) | public class GetJsonDataUtil {
method getJson (line 21) | public String getJson(Context context,String fileName) {
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/JsonDataActivity.java
class JsonDataActivity (line 29) | public class JsonDataActivity extends AppCompatActivity implements View....
method onCreate (line 42) | @Override
method handleMessage (line 51) | public void handleMessage(Message msg) {
method initView (line 80) | private void initView() {
method onClick (line 85) | @Override
method showPickerView (line 102) | private void showPickerView() {// 弹出选择器
method initJsonData (line 137) | private void initJsonData() {//解析数据
method parseData (line 192) | public ArrayList<JsonBean> parseData(String result) {//Gson 解析
method onDestroy (line 209) | @Override
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.java
class MainActivity (line 40) | public class MainActivity extends AppCompatActivity implements View.OnCl...
method onCreate (line 57) | @Override
method onClick (line 94) | @Override
method initLunarPicker (line 122) | private void initLunarPicker() {
method initTimePicker (line 196) | private void initTimePicker() {//Dialog 模式下,在底部弹出
method initCustomTimePicker (line 245) | private void initCustomTimePicker() {
method initOptionPicker (line 315) | private void initOptionPicker() {//条件选择器初始化
method initCustomOptionPicker (line 360) | private void initCustomOptionPicker() {//条件选择器初始化,自定义布局
method initNoLinkOptionsPicker (line 416) | private void initNoLinkOptionsPicker() {// 不联动的多级选项
method getTime (line 445) | private String getTime(Date date) {//可根据需要自行截取数据显示
method getOptionData (line 451) | private void getOptionData() {
method getCardData (line 484) | private void getCardData() {
method getNoLinkData (line 497) | private void getNoLinkData() {
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/TestCircleWheelViewActivity.java
class TestCircleWheelViewActivity (line 20) | public class TestCircleWheelViewActivity extends AppCompatActivity {
method onCreate (line 22) | @Override
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/TestFragment.java
class TestFragment (line 25) | public class TestFragment extends Fragment implements View.OnClickListen...
method onCreateView (line 31) | @Nullable
method onActivityCreated (line 39) | @Override
method initTimePicker (line 48) | private void initTimePicker() {
method onClick (line 103) | @Override
method getTime (line 108) | private String getTime(Date date) {//可根据需要自行截取数据显示
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/bean/CardBean.java
class CardBean (line 12) | public class CardBean implements IPickerViewData {
method CardBean (line 16) | public CardBean(int id, String cardNo) {
method getId (line 21) | public int getId() {
method setId (line 25) | public void setId(int id) {
method getCardNo (line 29) | public String getCardNo() {
method setCardNo (line 33) | public void setCardNo(String cardNo) {
method getPickerViewText (line 37) | @Override
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/bean/JsonBean.java
class JsonBean (line 15) | public class JsonBean implements IPickerViewData {
method getName (line 26) | public String getName() {
method setName (line 30) | public void setName(String name) {
method getCityList (line 34) | public List<CityBean> getCityList() {
method setCityList (line 38) | public void setCityList(List<CityBean> city) {
method getPickerViewText (line 45) | @Override
class CityBean (line 51) | public static class CityBean {
method getName (line 60) | public String getName() {
method setName (line 64) | public void setName(String name) {
method getArea (line 68) | public List<String> getArea() {
method setArea (line 72) | public void setArea(List<String> area) {
FILE: app/src/main/java/com/bigkoo/pickerviewdemo/bean/ProvinceBean.java
class ProvinceBean (line 9) | public class ProvinceBean implements IPickerViewData {
method ProvinceBean (line 15) | public ProvinceBean(long id,String name,String description,String othe...
method getId (line 22) | public long getId() {
method setId (line 26) | public void setId(long id) {
method getName (line 30) | public String getName() {
method setName (line 34) | public void setName(String name) {
method getDescription (line 38) | public String getDescription() {
method setDescription (line 42) | public void setDescription(String description) {
method getOthers (line 46) | public String getOthers() {
method setOthers (line 50) | public void setOthers(String others) {
method getPickerViewText (line 55) | @Override
FILE: pickerview/src/androidTest/java/com/bigkoo/pickerview/ApplicationTest.java
class ApplicationTest (line 9) | public class ApplicationTest extends ApplicationTestCase<Application> {
method ApplicationTest (line 10) | public ApplicationTest() {
FILE: pickerview/src/main/java/com/bigkoo/pickerview/adapter/ArrayWheelAdapter.java
class ArrayWheelAdapter (line 11) | public class ArrayWheelAdapter<T> implements WheelAdapter {
method ArrayWheelAdapter (line 21) | public ArrayWheelAdapter(List<T> items) {
method getItem (line 26) | @Override
method getItemsCount (line 34) | @Override
method indexOf (line 39) | @Override
FILE: pickerview/src/main/java/com/bigkoo/pickerview/adapter/NumericWheelAdapter.java
class NumericWheelAdapter (line 9) | public class NumericWheelAdapter implements WheelAdapter {
method NumericWheelAdapter (line 19) | public NumericWheelAdapter(int minValue, int maxValue) {
method getItem (line 24) | @Override
method getItemsCount (line 33) | @Override
method indexOf (line 38) | @Override
FILE: pickerview/src/main/java/com/bigkoo/pickerview/builder/OptionsPickerBuilder.java
class OptionsPickerBuilder (line 20) | public class OptionsPickerBuilder {
method OptionsPickerBuilder (line 27) | public OptionsPickerBuilder(Context context, OnOptionsSelectListener l...
method setSubmitText (line 34) | public OptionsPickerBuilder setSubmitText(String textContentConfirm) {
method setCancelText (line 39) | public OptionsPickerBuilder setCancelText(String textContentCancel) {
method setTitleText (line 44) | public OptionsPickerBuilder setTitleText(String textContentTitle) {
method isDialog (line 49) | public OptionsPickerBuilder isDialog(boolean isDialog) {
method addOnCancelClickListener (line 54) | public OptionsPickerBuilder addOnCancelClickListener(View.OnClickListe...
method setSubmitColor (line 60) | public OptionsPickerBuilder setSubmitColor(int textColorConfirm) {
method setCancelColor (line 65) | public OptionsPickerBuilder setCancelColor(int textColorCancel) {
method setBackgroundId (line 76) | @Deprecated
method setOutSideColor (line 88) | public OptionsPickerBuilder setOutSideColor(int outSideColor) {
method setDecorView (line 100) | public OptionsPickerBuilder setDecorView(ViewGroup decorView) {
method setLayoutRes (line 105) | public OptionsPickerBuilder setLayoutRes(int res, CustomListener liste...
method setBgColor (line 111) | public OptionsPickerBuilder setBgColor(int bgColorWheel) {
method setTitleBgColor (line 116) | public OptionsPickerBuilder setTitleBgColor(int bgColorTitle) {
method setTitleColor (line 121) | public OptionsPickerBuilder setTitleColor(int textColorTitle) {
method setSubCalSize (line 126) | public OptionsPickerBuilder setSubCalSize(int textSizeSubmitCancel) {
method setTitleSize (line 131) | public OptionsPickerBuilder setTitleSize(int textSizeTitle) {
method setContentTextSize (line 136) | public OptionsPickerBuilder setContentTextSize(int textSizeContent) {
method setOutSideCancelable (line 141) | public OptionsPickerBuilder setOutSideCancelable(boolean cancelable) {
method setLabels (line 147) | public OptionsPickerBuilder setLabels(String label1, String label2, St...
method setLineSpacingMultiplier (line 159) | public OptionsPickerBuilder setLineSpacingMultiplier(float lineSpacing...
method setDividerColor (line 169) | public OptionsPickerBuilder setDividerColor(@ColorInt int dividerColor) {
method setDividerType (line 179) | public OptionsPickerBuilder setDividerType(WheelView.DividerType divid...
method setTextColorCenter (line 189) | public OptionsPickerBuilder setTextColorCenter(int textColorCenter) {
method setTextColorOut (line 199) | public OptionsPickerBuilder setTextColorOut(@ColorInt int textColorOut) {
method setTypeface (line 204) | public OptionsPickerBuilder setTypeface(Typeface font) {
method setCyclic (line 209) | public OptionsPickerBuilder setCyclic(boolean cyclic1, boolean cyclic2...
method setSelectOptions (line 216) | public OptionsPickerBuilder setSelectOptions(int option1) {
method setSelectOptions (line 221) | public OptionsPickerBuilder setSelectOptions(int option1, int option2) {
method setSelectOptions (line 227) | public OptionsPickerBuilder setSelectOptions(int option1, int option2,...
method setTextXOffset (line 234) | public OptionsPickerBuilder setTextXOffset(int xoffset_one, int xoffse...
method isCenterLabel (line 241) | public OptionsPickerBuilder isCenterLabel(boolean isCenterLabel) {
method setItemVisibleCount (line 252) | public OptionsPickerBuilder setItemVisibleCount(int count) {
method isAlphaGradient (line 262) | public OptionsPickerBuilder isAlphaGradient(boolean isAlphaGradient) {
method isRestoreItem (line 273) | public OptionsPickerBuilder isRestoreItem(boolean isRestoreItem) {
method setOptionsSelectChangeListener (line 282) | public OptionsPickerBuilder setOptionsSelectChangeListener(OnOptionsSe...
method build (line 288) | public <T> OptionsPickerView<T> build() {
FILE: pickerview/src/main/java/com/bigkoo/pickerview/builder/TimePickerBuilder.java
class TimePickerBuilder (line 21) | public class TimePickerBuilder {
method TimePickerBuilder (line 26) | public TimePickerBuilder(Context context, OnTimeSelectListener listene...
method setGravity (line 33) | public TimePickerBuilder setGravity(int gravity) {
method addOnCancelClickListener (line 38) | public TimePickerBuilder addOnCancelClickListener(View.OnClickListener...
method setType (line 51) | public TimePickerBuilder setType(boolean[] type) {
method setSubmitText (line 56) | public TimePickerBuilder setSubmitText(String textContentConfirm) {
method isDialog (line 61) | public TimePickerBuilder isDialog(boolean isDialog) {
method setCancelText (line 66) | public TimePickerBuilder setCancelText(String textContentCancel) {
method setTitleText (line 71) | public TimePickerBuilder setTitleText(String textContentTitle) {
method setSubmitColor (line 76) | public TimePickerBuilder setSubmitColor(int textColorConfirm) {
method setCancelColor (line 81) | public TimePickerBuilder setCancelColor(int textColorCancel) {
method setDecorView (line 92) | public TimePickerBuilder setDecorView(ViewGroup decorView) {
method setBgColor (line 97) | public TimePickerBuilder setBgColor(int bgColorWheel) {
method setTitleBgColor (line 102) | public TimePickerBuilder setTitleBgColor(int bgColorTitle) {
method setTitleColor (line 107) | public TimePickerBuilder setTitleColor(int textColorTitle) {
method setSubCalSize (line 112) | public TimePickerBuilder setSubCalSize(int textSizeSubmitCancel) {
method setTitleSize (line 117) | public TimePickerBuilder setTitleSize(int textSizeTitle) {
method setContentTextSize (line 122) | public TimePickerBuilder setContentTextSize(int textSizeContent) {
method setItemVisibleCount (line 132) | public TimePickerBuilder setItemVisibleCount(int count) {
method isAlphaGradient (line 142) | public TimePickerBuilder isAlphaGradient(boolean isAlphaGradient) {
method setDate (line 153) | public TimePickerBuilder setDate(Calendar date) {
method setLayoutRes (line 158) | public TimePickerBuilder setLayoutRes(int res, CustomListener customLi...
method setRangDate (line 170) | public TimePickerBuilder setRangDate(Calendar startDate, Calendar endD...
method setLineSpacingMultiplier (line 182) | public TimePickerBuilder setLineSpacingMultiplier(float lineSpacingMul...
method setDividerColor (line 193) | public TimePickerBuilder setDividerColor(@ColorInt int dividerColor) {
method setDividerType (line 203) | public TimePickerBuilder setDividerType(WheelView.DividerType dividerT...
method setBackgroundId (line 213) | @Deprecated
method setOutSideColor (line 224) | public TimePickerBuilder setOutSideColor(@ColorInt int outSideColor) {
method setTextColorCenter (line 234) | public TimePickerBuilder setTextColorCenter(@ColorInt int textColorCen...
method setTextColorOut (line 244) | public TimePickerBuilder setTextColorOut(@ColorInt int textColorOut) {
method isCyclic (line 249) | public TimePickerBuilder isCyclic(boolean cyclic) {
method setOutSideCancelable (line 254) | public TimePickerBuilder setOutSideCancelable(boolean cancelable) {
method setLunarCalendar (line 259) | public TimePickerBuilder setLunarCalendar(boolean lunarCalendar) {
method setLabel (line 265) | public TimePickerBuilder setLabel(String label_year, String label_mont...
method setTextXOffset (line 286) | public TimePickerBuilder setTextXOffset(int x_offset_year, int x_offse...
method isCenterLabel (line 297) | public TimePickerBuilder isCenterLabel(boolean isCenterLabel) {
method setTimeSelectChangeListener (line 306) | public TimePickerBuilder setTimeSelectChangeListener(OnTimeSelectChang...
method build (line 311) | public TimePickerView build() {
FILE: pickerview/src/main/java/com/bigkoo/pickerview/configure/PickerOptions.java
class PickerOptions (line 24) | public class PickerOptions {
method PickerOptions (line 71) | public PickerOptions(int buildType) {
FILE: pickerview/src/main/java/com/bigkoo/pickerview/listener/CustomListener.java
type CustomListener (line 11) | public interface CustomListener {
method customLayout (line 12) | void customLayout(View v);
FILE: pickerview/src/main/java/com/bigkoo/pickerview/listener/ISelectTimeCallback.java
type ISelectTimeCallback (line 7) | public interface ISelectTimeCallback {
method onTimeSelectChanged (line 9) | public void onTimeSelectChanged();
FILE: pickerview/src/main/java/com/bigkoo/pickerview/listener/OnDismissListener.java
type OnDismissListener (line 6) | public interface OnDismissListener {
method onDismiss (line 7) | public void onDismiss(Object o);
FILE: pickerview/src/main/java/com/bigkoo/pickerview/listener/OnOptionsSelectChangeListener.java
type OnOptionsSelectChangeListener (line 7) | public interface OnOptionsSelectChangeListener {
method onOptionsSelectChanged (line 9) | void onOptionsSelectChanged(int options1, int options2, int options3);
FILE: pickerview/src/main/java/com/bigkoo/pickerview/listener/OnOptionsSelectListener.java
type OnOptionsSelectListener (line 9) | public interface OnOptionsSelectListener {
method onOptionsSelect (line 11) | void onOptionsSelect(int options1, int options2, int options3, View v);
FILE: pickerview/src/main/java/com/bigkoo/pickerview/listener/OnTimeSelectChangeListener.java
type OnTimeSelectChangeListener (line 9) | public interface OnTimeSelectChangeListener {
method onTimeSelectChanged (line 11) | void onTimeSelectChanged(Date date);
FILE: pickerview/src/main/java/com/bigkoo/pickerview/listener/OnTimeSelectListener.java
type OnTimeSelectListener (line 11) | public interface OnTimeSelectListener {
method onTimeSelect (line 13) | void onTimeSelect(Date date, View v);
FILE: pickerview/src/main/java/com/bigkoo/pickerview/utils/ChinaDate.java
class ChinaDate (line 10) | public class ChinaDate {
method lYearDays (line 61) | final private static int lYearDays(int y) {
method leapDays (line 76) | final public static int leapDays(int y) {
method leapMonth (line 92) | final public static int leapMonth(int y) {
method monthDays (line 103) | final public static int monthDays(int y, int m) {
method AnimalsYear (line 116) | final public static String AnimalsYear(int y) {
method cyclicalm (line 126) | final private static String cyclicalm(int num) {
method cyclical (line 136) | final public static String cyclical(int y) {
method calElement (line 150) | final public static long[] calElement(int y, int m, int d) {
method getChinaDate (line 207) | public final static String getChinaDate(int day) {
method getCurrentLunarDate (line 257) | public static String getCurrentLunarDate() {
method oneDay (line 280) | public static String oneDay(int year, int month, int day) {
method getLunarYearText (line 309) | public static String getLunarYearText(int lunarYear) {
method getYears (line 314) | public static ArrayList<String> getYears(int startYear, int endYear) {
method getMonths (line 328) | public static ArrayList<String> getMonths(int year) {
method getLunarDays (line 345) | public static ArrayList<String> getLunarDays(int maxDay) {
FILE: pickerview/src/main/java/com/bigkoo/pickerview/utils/LunarCalendar.java
class LunarCalendar (line 12) | public class LunarCalendar {
method lunarToSolar (line 135) | public static final int[] lunarToSolar(int year, int month, int monthDay,
method solarToLunar (line 220) | public static final int[] solarToLunar(int year, int month, int monthD...
method solarToLunarDeprecated (line 281) | @Deprecated
method daysInMonth (line 340) | final public static int daysInMonth(int year, int month) {
method daysInMonth (line 352) | public static final int daysInMonth(int year, int month, boolean leap) {
method daysInLunarYear (line 380) | private static int daysInLunarYear(int year) {
method daysInLunarMonth (line 400) | private static int daysInLunarMonth(int year, int month) {
method leapMonth (line 413) | public static int leapMonth(int year) {
method getBitInt (line 418) | private static int getBitInt(int data, int length, int shift) {
method solarToInt (line 422) | private static long solarToInt(int y, int m, int d) {
FILE: pickerview/src/main/java/com/bigkoo/pickerview/utils/PickerViewAnimateUtil.java
class PickerViewAnimateUtil (line 10) | public class PickerViewAnimateUtil {
method getAnimationResource (line 19) | public static int getAnimationResource(int gravity, boolean isInAnimat...
FILE: pickerview/src/main/java/com/bigkoo/pickerview/view/BasePickerView.java
class BasePickerView (line 28) | public class BasePickerView {
method BasePickerView (line 49) | public BasePickerView(Context context) {
method initViews (line 54) | protected void initViews() {
method initAnim (line 99) | protected void initAnim() {
method initEvents (line 104) | protected void initEvents() {
method show (line 112) | public void show(View v, boolean isAnim) {
method show (line 118) | public void show(boolean isAnim) {
method show (line 122) | public void show(View v) {
method show (line 131) | public void show() {
method onAttached (line 150) | private void onAttached(View view) {
method isShowing (line 163) | public boolean isShowing() {
method dismiss (line 172) | public void dismiss() {
method dismissImmediately (line 208) | public void dismissImmediately() {
method getInAnimation (line 226) | private Animation getInAnimation() {
method getOutAnimation (line 231) | private Animation getOutAnimation() {
method setOnDismissListener (line 236) | public BasePickerView setOnDismissListener(OnDismissListener onDismiss...
method setKeyBackCancelable (line 241) | public void setKeyBackCancelable(boolean isCancelable) {
method onKey (line 260) | @Override
method setOutSideCancelable (line 270) | protected BasePickerView setOutSideCancelable(boolean isCancelable) {
method setDialogOutSideCancelable (line 288) | public void setDialogOutSideCancelable() {
method onTouch (line 299) | @Override
method findViewById (line 308) | public View findViewById(int id) {
method createDialog (line 312) | public void createDialog() {
method showDialog (line 335) | private void showDialog() {
method dismissDialog (line 341) | private void dismissDialog() {
method getDialogContainerLayout (line 347) | public ViewGroup getDialogContainerLayout() {
method getDialog (line 352) | public Dialog getDialog() {
method isDialog (line 357) | public boolean isDialog() {
FILE: pickerview/src/main/java/com/bigkoo/pickerview/view/OptionsPickerView.java
class OptionsPickerView (line 21) | public class OptionsPickerView<T> extends BasePickerView implements View...
method OptionsPickerView (line 29) | public OptionsPickerView(PickerOptions pickerOptions) {
method initView (line 35) | private void initView(Context context) {
method setTitleText (line 107) | public void setTitleText(String text) {
method setSelectOptions (line 119) | public void setSelectOptions(int option1) {
method setSelectOptions (line 125) | public void setSelectOptions(int option1, int option2) {
method setSelectOptions (line 131) | public void setSelectOptions(int option1, int option2, int option3) {
method reSetCurrentItems (line 138) | private void reSetCurrentItems() {
method setPicker (line 144) | public void setPicker(List<T> optionsItems) {
method setPicker (line 148) | public void setPicker(List<T> options1Items, List<List<T>> options2Ite...
method setPicker (line 152) | public void setPicker(List<T> options1Items,
method setNPicker (line 162) | public void setNPicker(List<T> options1Items,
method onClick (line 171) | @Override
method returnData (line 185) | public void returnData() {
method isDialog (line 193) | @Override
FILE: pickerview/src/main/java/com/bigkoo/pickerview/view/TimePickerView.java
class TimePickerView (line 25) | public class TimePickerView extends BasePickerView implements View.OnCli...
method TimePickerView (line 31) | public TimePickerView(PickerOptions pickerOptions) {
method initView (line 37) | private void initView(Context context) {
method initWheelTime (line 85) | private void initWheelTime(LinearLayout timePickerView) {
method setDate (line 152) | public void setDate(Calendar date) {
method setRange (line 160) | private void setRange() {
method setRangDate (line 169) | private void setRangDate() {
method initDefaultSelectedDate (line 174) | private void initDefaultSelectedDate() {
method setTime (line 193) | private void setTime() {
method onClick (line 218) | @Override
method returnData (line 231) | public void returnData() {
method setTitleText (line 247) | public void setTitleText(String text) {
method setLunarCalendar (line 259) | public void setLunarCalendar(boolean lunar) {
method isLunarCalendar (line 280) | public boolean isLunarCalendar() {
method isDialog (line 285) | @Override
FILE: pickerview/src/main/java/com/bigkoo/pickerview/view/WheelOptions.java
class WheelOptions (line 14) | public class WheelOptions<T> {
method getView (line 31) | public View getView() {
method setView (line 35) | public void setView(View view) {
method WheelOptions (line 39) | public WheelOptions(View view, boolean isRestoreItem) {
method setPicker (line 49) | public void setPicker(List<T> options1Items,
method setNPicker (line 163) | public void setNPicker(List<T> options1Items, List<T> options2Items, L...
method setTextContentSize (line 219) | public void setTextContentSize(int textSize) {
method setLineSpacingMultiplier (line 225) | private void setLineSpacingMultiplier() {
method setLabels (line 236) | public void setLabels(String label1, String label2, String label3) {
method setTextXOffset (line 251) | public void setTextXOffset(int x_offset_one, int x_offset_two, int x_o...
method setCyclic (line 262) | public void setCyclic(boolean cyclic) {
method setTypeface (line 273) | public void setTypeface(Typeface font) {
method setCyclic (line 284) | public void setCyclic(boolean cyclic1, boolean cyclic2, boolean cyclic...
method getCurrentItems (line 296) | public int[] getCurrentItems() {
method setCurrentItems (line 315) | public void setCurrentItems(int option1, int option2, int option3) {
method itemSelected (line 325) | private void itemSelected(int opt1Select, int opt2Select, int opt3Sele...
method setLineSpacingMultiplier (line 344) | public void setLineSpacingMultiplier(float lineSpacingMultiplier) {
method setDividerColor (line 355) | public void setDividerColor(int dividerColor) {
method setDividerType (line 366) | public void setDividerType(WheelView.DividerType dividerType) {
method setTextColorCenter (line 377) | public void setTextColorCenter(int textColorCenter) {
method setTextColorOut (line 388) | public void setTextColorOut(int textColorOut) {
method isCenterLabel (line 399) | public void isCenterLabel(boolean isCenterLabel) {
method setOptionsSelectChangeListener (line 405) | public void setOptionsSelectChangeListener(OnOptionsSelectChangeListen...
method setLinkage (line 409) | public void setLinkage(boolean linkage) {
method setItemsVisible (line 418) | public void setItemsVisible(int itemsVisible) {
method setAlphaGradient (line 424) | public void setAlphaGradient(boolean isAlphaGradient) {
FILE: pickerview/src/main/java/com/bigkoo/pickerview/view/WheelTime.java
class WheelTime (line 21) | public class WheelTime {
method WheelTime (line 53) | public WheelTime(View view, boolean[] type, int gravity, int textSize) {
method setLunarMode (line 61) | public void setLunarMode(boolean isLunarCalendar) {
method isLunarMode (line 65) | public boolean isLunarMode() {
method setPicker (line 69) | public void setPicker(int year, int month, int day) {
method setPicker (line 73) | public void setPicker(int year, final int month, int day, int h, int m...
method setLunar (line 92) | private void setLunar(int year, final int month, int day, boolean isLe...
method setSolar (line 240) | private void setSolar(int year, final int month, int day, int h, int m...
method setChangedListener (line 522) | private void setChangedListener(WheelView wheelView) {
method setReDay (line 535) | private void setReDay(int year_num, int monthNum, int startD, int endD...
method setContentTextSize (line 575) | private void setContentTextSize() {
method setLabels (line 585) | public void setLabels(String label_year, String label_month, String la...
method setTextXOffset (line 623) | public void setTextXOffset(int x_offset_year, int x_offset_month, int ...
method setCyclic (line 638) | public void setCyclic(boolean cyclic) {
method getTime (line 647) | public String getTime() {
method getLunarTime (line 690) | private String getLunarTime() {
method getView (line 719) | public View getView() {
method getStartYear (line 723) | public int getStartYear() {
method setStartYear (line 727) | public void setStartYear(int startYear) {
method getEndYear (line 731) | public int getEndYear() {
method setEndYear (line 735) | public void setEndYear(int endYear) {
method setRangDate (line 740) | public void setRangDate(Calendar startDate, Calendar endDate) {
method setLineSpacingMultiplier (line 802) | public void setLineSpacingMultiplier(float lineSpacingMultiplier) {
method setDividerColor (line 816) | public void setDividerColor(int dividerColor) {
method setDividerType (line 830) | public void setDividerType(WheelView.DividerType dividerType) {
method setTextColorCenter (line 844) | public void setTextColorCenter(int textColorCenter) {
method setTextColorOut (line 858) | public void setTextColorOut(int textColorOut) {
method isCenterLabel (line 870) | public void isCenterLabel(boolean isCenterLabel) {
method setSelectChangeCallback (line 879) | public void setSelectChangeCallback(ISelectTimeCallback mSelectChangeC...
method setItemsVisible (line 883) | public void setItemsVisible(int itemsVisibleCount) {
method setAlphaGradient (line 892) | public void setAlphaGradient(boolean isAlphaGradient) {
FILE: wheelview/src/androidTest/java/test/wheelview/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 19) | @Test
FILE: wheelview/src/main/java/com/contrarywind/adapter/WheelAdapter.java
type WheelAdapter (line 4) | public interface WheelAdapter<T> {
method getItemsCount (line 9) | int getItemsCount();
method getItem (line 16) | T getItem(int index);
method indexOf (line 24) | int indexOf(T o);
FILE: wheelview/src/main/java/com/contrarywind/interfaces/IPickerViewData.java
type IPickerViewData (line 6) | public interface IPickerViewData {
method getPickerViewText (line 7) | String getPickerViewText();
FILE: wheelview/src/main/java/com/contrarywind/listener/LoopViewGestureListener.java
class LoopViewGestureListener (line 11) | public final class LoopViewGestureListener extends android.view.GestureD...
method LoopViewGestureListener (line 16) | public LoopViewGestureListener(WheelView wheelView) {
method onFling (line 20) | @Override
FILE: wheelview/src/main/java/com/contrarywind/listener/OnItemSelectedListener.java
type OnItemSelectedListener (line 4) | public interface OnItemSelectedListener {
method onItemSelected (line 5) | void onItemSelected(int index);
FILE: wheelview/src/main/java/com/contrarywind/timer/InertiaTimerTask.java
class InertiaTimerTask (line 13) | public final class InertiaTimerTask extends TimerTask {
method InertiaTimerTask (line 23) | public InertiaTimerTask(WheelView wheelView, float velocityY) {
method run (line 30) | @Override
FILE: wheelview/src/main/java/com/contrarywind/timer/MessageHandler.java
class MessageHandler (line 14) | public final class MessageHandler extends Handler {
method MessageHandler (line 21) | public MessageHandler(WheelView wheelView) {
method handleMessage (line 25) | @Override
FILE: wheelview/src/main/java/com/contrarywind/timer/SmoothScrollTimerTask.java
class SmoothScrollTimerTask (line 12) | public final class SmoothScrollTimerTask extends TimerTask {
method SmoothScrollTimerTask (line 19) | public SmoothScrollTimerTask(WheelView wheelView, int offset) {
method run (line 26) | @Override
FILE: wheelview/src/main/java/com/contrarywind/view/WheelView.java
class WheelView (line 35) | public class WheelView extends View {
type ACTION (line 37) | public enum ACTION { // 点击,滑翔(滑到尽头),拖拽事件
type DividerType (line 41) | public enum DividerType { // 分隔线类型
method WheelView (line 127) | public WheelView(Context context) {
method WheelView (line 131) | public WheelView(Context context, AttributeSet attrs) {
method judgeLineSpace (line 168) | private void judgeLineSpace() {
method initLoopView (line 176) | private void initLoopView(Context context) {
method initPaints (line 188) | private void initPaints() {
method reMeasure (line 209) | private void reMeasure() {//重新测量
method measureTextWidthHeight (line 243) | private void measureTextWidthHeight() {
method smoothScroll (line 259) | public void smoothScroll(ACTION action) {//平滑滚动的实现
method scrollBy (line 273) | public final void scrollBy(float velocityY) {//滚动惯性的实现
method cancelFuture (line 278) | public void cancelFuture() {
method setCyclic (line 290) | public final void setCyclic(boolean cyclic) {
method setTypeface (line 294) | public final void setTypeface(Typeface font) {
method setTextSize (line 300) | public final void setTextSize(float size) {
method setCurrentItem (line 308) | public final void setCurrentItem(int currentItem) {
method setOnItemSelectedListener (line 316) | public final void setOnItemSelectedListener(OnItemSelectedListener OnI...
method setAdapter (line 320) | public final void setAdapter(WheelAdapter adapter) {
method setItemsVisibleCount (line 326) | public void setItemsVisibleCount(int visibleCount) {
method setAlphaGradient (line 333) | public void setAlphaGradient(boolean alphaGradient) {
method getAdapter (line 337) | public final WheelAdapter getAdapter() {
method getCurrentItem (line 341) | public final int getCurrentItem() {
method onItemSelected (line 352) | public final void onItemSelected() {
method onDraw (line 363) | @Override
method setOutPaintStyle (line 550) | private void setOutPaintStyle(float offsetCoefficient, float angle) {
method reMeasureTextSize (line 572) | private void reMeasureTextSize(String contentText) {
method getLoopMappingIndex (line 590) | private int getLoopMappingIndex(int index) {
method getContentText (line 607) | private String getContentText(Object item) {
method getFixNum (line 619) | private String getFixNum(int timeNum) {
method measuredCenterContentStart (line 623) | private void measuredCenterContentStart(String content) {
method measuredOutContentStart (line 643) | private void measuredOutContentStart(String content) {
method onMeasure (line 663) | @Override
method onTouchEvent (line 670) | @Override
method getItemsCount (line 744) | public int getItemsCount() {
method setLabel (line 748) | public void setLabel(String label) {
method isCenterLabel (line 752) | public void isCenterLabel(boolean isCenterLabel) {
method setGravity (line 756) | public void setGravity(int gravity) {
method getTextWidth (line 760) | public int getTextWidth(Paint paint, String str) { //calculate text width
method setIsOptions (line 773) | public void setIsOptions(boolean options) {
method setTextColorOut (line 777) | public void setTextColorOut(int textColorOut) {
method setTextColorCenter (line 783) | public void setTextColorCenter(int textColorCenter) {
method setTextXOffset (line 788) | public void setTextXOffset(int textXOffset) {
method setDividerWidth (line 795) | public void setDividerWidth(int dividerWidth) {
method setDividerColor (line 800) | public void setDividerColor(int dividerColor) {
method setDividerType (line 805) | public void setDividerType(DividerType dividerType) {
method setLineSpacingMultiplier (line 809) | public void setLineSpacingMultiplier(float lineSpacingMultiplier) {
method isLoop (line 816) | public boolean isLoop() {
method getTotalScrollY (line 820) | public float getTotalScrollY() {
method setTotalScrollY (line 824) | public void setTotalScrollY(float totalScrollY) {
method getItemHeight (line 828) | public float getItemHeight() {
method getInitPosition (line 832) | public int getInitPosition() {
method getHandler (line 836) | @Override
Condensed preview — 97 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (410K chars).
[
{
"path": ".gitignore",
"chars": 339,
"preview": "# built application files\n*.apk\n*.ap_\n\n# files for the dex VM\n*.dex\n\n# Java class files\n*.class\n\n# generated files\nbin/\n"
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README-en.md",
"chars": 10144,
"preview": "\n# Android-PickerView\n\n\n\n[](https://android-arsenal.com/api"
},
{
"path": "README.md",
"chars": 12711,
"preview": "## 注意⚠️:已停止更新,原有版本jcenter库可以继续使用。建议直接下载源码引入 module 到自己项目改造。\n\n## Android-PickerView\n[ users:\n# Gradle settings configured through the IDE *will o"
},
{
"path": "gradlew",
"chars": 5080,
"preview": "#!/usr/bin/env bash\n\n##############################################################################\n##\n## Gradle start "
},
{
"path": "gradlew.bat",
"chars": 2404,
"preview": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@r"
},
{
"path": "pickerview/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "pickerview/build.gradle",
"chars": 1379,
"preview": "apply plugin: 'com.android.library'\napply plugin: 'com.github.dcendents.android-maven'\n//apply plugin: 'com.novoda.bintr"
},
{
"path": "pickerview/proguard-rules.pro",
"chars": 664,
"preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /U"
},
{
"path": "pickerview/src/androidTest/java/com/bigkoo/pickerview/ApplicationTest.java",
"chars": 352,
"preview": "package com.bigkoo.pickerview;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * <a href"
},
{
"path": "pickerview/src/main/AndroidManifest.xml",
"chars": 120,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.bigkoo.pickerview\">\n\n\n</manifest>\n"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/adapter/ArrayWheelAdapter.java",
"chars": 733,
"preview": "package com.bigkoo.pickerview.adapter;\r\n\r\nimport com.contrarywind.adapter.WheelAdapter;\r\n\r\nimport java.util.List;\r\n\r\n/**"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/adapter/NumericWheelAdapter.java",
"chars": 874,
"preview": "package com.bigkoo.pickerview.adapter;\r\n\r\n\r\nimport com.contrarywind.adapter.WheelAdapter;\r\n\r\n/**\r\n * Numeric Wheel adapt"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/builder/OptionsPickerBuilder.java",
"chars": 8282,
"preview": "package com.bigkoo.pickerview.builder;\n\nimport android.content.Context;\nimport android.graphics.Typeface;\nimport android"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/builder/TimePickerBuilder.java",
"chars": 8893,
"preview": "package com.bigkoo.pickerview.builder;\n\nimport android.content.Context;\nimport android.support.annotation.ColorInt;\nimpo"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/configure/PickerOptions.java",
"chars": 4086,
"preview": "package com.bigkoo.pickerview.configure;\n\nimport android.content.Context;\nimport android.graphics.Typeface;\nimport andro"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/listener/CustomListener.java",
"chars": 210,
"preview": "package com.bigkoo.pickerview.listener;\n\nimport android.view.View;\n\n/**\n * Created by KyuYi on 2017/3/2.\n * E-Mail:kyu_y"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/listener/ISelectTimeCallback.java",
"chars": 168,
"preview": "package com.bigkoo.pickerview.listener;\n\n/**\n * Created by zengsong on 2018/3/21.\n */\n\npublic interface ISelectTimeCallb"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/listener/OnDismissListener.java",
"chars": 154,
"preview": "package com.bigkoo.pickerview.listener;\n\n/**\n * Created by Sai on 15/8/9.\n */\npublic interface OnDismissListener {\n p"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/listener/OnOptionsSelectChangeListener.java",
"chars": 215,
"preview": "package com.bigkoo.pickerview.listener;\n\n/**\n * Created by xiaosong on 2018/3/20.\n */\n\npublic interface OnOptionsSelectC"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/listener/OnOptionsSelectListener.java",
"chars": 237,
"preview": "package com.bigkoo.pickerview.listener;\n\nimport android.view.View;\n\n/**\n * Created by xiaosong on 2018/3/20.\n */\n\npublic"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/listener/OnTimeSelectChangeListener.java",
"chars": 201,
"preview": "package com.bigkoo.pickerview.listener;\n\nimport java.util.Date;\n\n/**\n * Created by xiaosong on 2018/3/20.\n */\n\npublic in"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/listener/OnTimeSelectListener.java",
"chars": 223,
"preview": "package com.bigkoo.pickerview.listener;\n\nimport android.view.View;\n\nimport java.util.Date;\n\n/**\n * Created by xiaosong o"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/utils/ChinaDate.java",
"chars": 11596,
"preview": "package com.bigkoo.pickerview.utils;\r\n\r\nimport java.text.SimpleDateFormat;\r\nimport java.util.ArrayList;\r\nimport java.uti"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/utils/LunarCalendar.java",
"chars": 17504,
"preview": "package com.bigkoo.pickerview.utils;\r\n\r\nimport android.util.Log;\r\n\r\nimport java.util.Date;\r\nimport java.util.GregorianCa"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/utils/PickerViewAnimateUtil.java",
"chars": 789,
"preview": "package com.bigkoo.pickerview.utils;\n\nimport android.view.Gravity;\n\nimport com.bigkoo.pickerview.R;\n\n/**\n * Created by S"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/view/BasePickerView.java",
"chars": 10128,
"preview": "package com.bigkoo.pickerview.view;\n\nimport android.app.Activity;\nimport android.app.Dialog;\nimport android.content.Cont"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/view/OptionsPickerView.java",
"chars": 7178,
"preview": "package com.bigkoo.pickerview.view;\n\nimport android.content.Context;\nimport android.text.TextUtils;\nimport android.view."
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/view/TimePickerView.java",
"chars": 11101,
"preview": "package com.bigkoo.pickerview.view;\n\nimport android.content.Context;\nimport android.text.TextUtils;\nimport android.view."
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/view/WheelOptions.java",
"chars": 15142,
"preview": "package com.bigkoo.pickerview.view;\n\nimport android.graphics.Typeface;\nimport android.view.View;\n\nimport com.bigkoo.pick"
},
{
"path": "pickerview/src/main/java/com/bigkoo/pickerview/view/WheelTime.java",
"chars": 35065,
"preview": "package com.bigkoo.pickerview.view;\n\nimport android.view.View;\n\nimport com.bigkoo.pickerview.R;\nimport com.bigkoo.picker"
},
{
"path": "pickerview/src/main/res/anim/pickerview_dialog_scale_in.xml",
"chars": 491,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n\n <alpha\n "
},
{
"path": "pickerview/src/main/res/anim/pickerview_dialog_scale_out.xml",
"chars": 490,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n\n <alpha\n "
},
{
"path": "pickerview/src/main/res/anim/pickerview_slide_in_bottom.xml",
"chars": 344,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:shar"
},
{
"path": "pickerview/src/main/res/anim/pickerview_slide_out_bottom.xml",
"chars": 344,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:shar"
},
{
"path": "pickerview/src/main/res/drawable/selector_pickerview_btn.xml",
"chars": 270,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector\n xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "pickerview/src/main/res/layout/include_pickerview_topbar.xml",
"chars": 1829,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n an"
},
{
"path": "pickerview/src/main/res/layout/layout_basepickerview.xml",
"chars": 511,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout\n android:id=\"@+id/outmost_container\"\n xmlns:android=\"http://sc"
},
{
"path": "pickerview/src/main/res/layout/pickerview_options.xml",
"chars": 1379,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n andr"
},
{
"path": "pickerview/src/main/res/layout/pickerview_time.xml",
"chars": 1986,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n andr"
},
{
"path": "pickerview/src/main/res/values/dimens.xml",
"chars": 405,
"preview": "<resources>\n <!-- 顶部按钮栏高度 -->\n <dimen name=\"pickerview_topbar_height\">44dp</dimen>\n\n <!-- 顶部按钮padding -->\n <"
},
{
"path": "pickerview/src/main/res/values/integers.xml",
"chars": 123,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <integer name=\"animation_default_duration\">300</integer>\n</resourc"
},
{
"path": "pickerview/src/main/res/values/strings.xml",
"chars": 407,
"preview": "<resources>\n\n <string name=\"pickerview_cancel\">取消</string>\n <string name=\"pickerview_submit\">确定</string>\n <stri"
},
{
"path": "pickerview/src/main/res/values/styles.xml",
"chars": 1400,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <style name=\"custom_dialog2\" parent=\"@android:style/Theme.Dialog\""
},
{
"path": "pickerview/src/main/res/values-en/strings.xml",
"chars": 416,
"preview": "<resources>\n\n <string name=\"pickerview_cancel\">Cancel</string>\n <string name=\"pickerview_submit\">Confirm</string>\n"
},
{
"path": "settings.gradle",
"chars": 44,
"preview": "include ':app', ':pickerview', ':wheelview'\n"
},
{
"path": "wheelview/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "wheelview/build.gradle",
"chars": 1281,
"preview": "apply plugin: 'com.android.library'\napply plugin: 'com.github.dcendents.android-maven'\n//apply plugin: 'com.novoda.bintr"
},
{
"path": "wheelview/proguard-rules.pro",
"chars": 941,
"preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in C:"
},
{
"path": "wheelview/src/androidTest/java/test/wheelview/ExampleInstrumentedTest.java",
"chars": 737,
"preview": "package test.wheelview;\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegistry;\nimport and"
},
{
"path": "wheelview/src/main/AndroidManifest.xml",
"chars": 119,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.contrarywind.view\">\n\n</manifest>\n"
},
{
"path": "wheelview/src/main/java/com/contrarywind/adapter/WheelAdapter.java",
"chars": 545,
"preview": "package com.contrarywind.adapter;\n\n\npublic interface WheelAdapter<T> {\n\t/**\n\t * Gets items count\n\t * @return the count o"
},
{
"path": "wheelview/src/main/java/com/contrarywind/interfaces/IPickerViewData.java",
"chars": 147,
"preview": "package com.contrarywind.interfaces;\n\n/**\n * Created by Sai on 2016/7/13.\n */\npublic interface IPickerViewData {\n Str"
},
{
"path": "wheelview/src/main/java/com/contrarywind/listener/LoopViewGestureListener.java",
"chars": 560,
"preview": "package com.contrarywind.listener;\n\nimport android.view.MotionEvent;\n\nimport com.contrarywind.view.WheelView;\n\n\n/**\n * 手"
},
{
"path": "wheelview/src/main/java/com/contrarywind/listener/OnItemSelectedListener.java",
"chars": 117,
"preview": "package com.contrarywind.listener;\n\n\npublic interface OnItemSelectedListener {\n void onItemSelected(int index);\n}\n"
},
{
"path": "wheelview/src/main/java/com/contrarywind/timer/InertiaTimerTask.java",
"chars": 2613,
"preview": "package com.contrarywind.timer;\n\nimport com.contrarywind.view.WheelView;\n\nimport java.util.TimerTask;\n\n/**\n * 滚动惯性的实现\n *"
},
{
"path": "wheelview/src/main/java/com/contrarywind/timer/MessageHandler.java",
"chars": 1004,
"preview": "package com.contrarywind.timer;\n\nimport android.os.Handler;\nimport android.os.Message;\n\nimport com.contrarywind.view.Whe"
},
{
"path": "wheelview/src/main/java/com/contrarywind/timer/SmoothScrollTimerTask.java",
"chars": 2147,
"preview": "package com.contrarywind.timer;\n\nimport com.contrarywind.view.WheelView;\n\nimport java.util.TimerTask;\n\n/**\n * 平滑滚动的实现\n *"
},
{
"path": "wheelview/src/main/java/com/contrarywind/view/WheelView.java",
"chars": 30166,
"preview": "package com.contrarywind.view;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.gr"
},
{
"path": "wheelview/src/main/res/values/attrs.xml",
"chars": 698,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <declare-styleable name=\"pickerview\">\n <attr name=\"wheelvi"
},
{
"path": "wheelview/src/main/res/values/colors.xml",
"chars": 633,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"pickerview_timebtn_nor\">#057dff</color>\n <color n"
},
{
"path": "wheelview/src/main/res/values/dimens.xml",
"chars": 405,
"preview": "<resources>\n <!-- 顶部按钮栏高度 -->\n <dimen name=\"pickerview_topbar_height\">44dp</dimen>\n\n <!-- 顶部按钮padding -->\n <"
},
{
"path": "wheelview/src/main/res/values/strings.xml",
"chars": 72,
"preview": "<resources>\n <string name=\"app_name\">wheelview</string>\n</resources>\n"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the Bigkoo/Android-PickerView GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 97 files (367.5 KB), approximately 106.6k tokens, and a symbol index with 388 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.