citypicker

简介:citypicker 高仿 iOS 滚轮实现 省市区 城市选择三级联动
更多:作者   提 Bug   官网   
标签:

v2.1.0

前言

在实际的项目中需要使用到省市区三级联动的功能,在网上找来找去,都没有找到一个合适的库, 所以自己就封装了一个,不需要自己添加数据源,直接引用即可。

亮点

  1. 无需自己配置省市区域的数据,不需要再进行解析之类的繁杂操作,只需引用即可,结果返回省市区、经纬度、城市 code 等多种数据信息,如果不满意样式的话可以自己修改源码!
  2. 多种样式选择,高仿 iOS 滚轮实现以及列表选择。

效果预览

样式选择

本库提供两种省市区城市选择器,一是列表,而是仿 iOS 滚轮实现的选择器。

1、高仿 iOS 滚轮实现城市选择器

拥有多种属性,个性化设置。

2、城市列表选择器

列表展示所有城市数据

支持快捷搜索,以及右边字母快捷定位所在城市


使用方法

gradle 引用

compile 'liji.library.dev:citypickerview:2.1.2'

代码混淆

#地区 3 级联动选择器
-keep class com.lljjcoder.**{
*;
}

代码示例

1、城市列表选择器代码

友情提醒:

列表选择器的原理主要就是通过 startActivityForResult 方法来实现的,如果不熟悉 startActivityForResult 的应用,请自行解决。

//首先跳转到列表页面,通过 startActivityForResult 实现页面跳转传值
Intent intent = new Intent(MainActivity.this, CityListSelectActivity.class);
startActivityForResult(intent, CityListSelectActivity.CITY_SELECT_RESULT_FRAG);

//接收选择器选中的结果:
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == CityListSelectActivity.CITY_SELECT_RESULT_FRAG) {
            if (resultCode == RESULT_OK) {
                if (data == null) {
                    return;
                }
                Bundle bundle = data.getExtras();

                CityInfoBean cityInfoBean = (CityInfoBean) bundle.getParcelable("cityinfo");

                if (null == cityInfoBean)
                    return;

                //城市名称
                String cityName = cityInfoBean.getName();
                //纬度
                String latitude = cityInfoBean.getLongitude();
                //经度
                String longitude = cityInfoBean.getLatitude();

                //获取到城市名称,经纬度值后可自行使用...
            }
        }
    }

2、高仿 iOS 滚轮实现选择器代码


//详细属性设置,如果不需要自定义样式的话,可以直接使用默认的,去掉下面的属性设置,直接 build()即可。
    CityConfig cityConfig = new CityConfig.Builder(CitypickerWheelActivity.this)
                .title("选择地区")
                .titleBackgroundColor("#E9E9E9")
                .textSize(18)
                .titleTextColor("#585858")
                .textColor("0xFF585858")
                .confirTextColor("#0000FF")
                .cancelTextColor("#000000")
                .province("江苏")
                .city("常州")
                .district("新北区")
                .visibleItemsCount(5)
                .provinceCyclic(true)
                .cityCyclic(true)
                .showBackground(true)
                .districtCyclic(true)
                .itemPadding(5)
                .setCityInfoType(CityConfig.CityInfoType.BASE)
                .setCityWheelType(CityConfig.WheelType.PRO_CITY_DIS)
                .build();

//配置属性

    CityPickerView cityPicker = new CityPickerView(cityConfig);
        cityPicker.show();
        cityPicker.setOnCityItemClickListener(new OnCityItemClickListener() {
            @Override
            public void onSelected(ProvinceBean province, CityBean city, DistrictBean district) {


                //ProvinceBean 省份信息
                //CityBean     城市信息
                //DistrictBean 区县信息



                //当 wheelType==CityConfig.WheelType.PRO 时,CityBean 和 DistrictBean 为 null
                //当 wheelType==CityConfig.WheelType.PRO_CITY 时, DistrictBean 为 null
                //当 wheelType==CityConfig.WheelType.PRO_CITY_DIS 时, 可取省市区三个对象的值

                //使用之前需判断 province、city、district 是否等于 null

            }

            @Override
            public void onCancel() {

            }
        });

注意:上述属性中存在一个属性 CityInfoType:

//设置加载省市区的数据类型
setCityInfoType(CityConfig.CityInfoType.BASE)

该属性是一个枚举类型
/**
* 城市数据类别
* BASE: 基本的城市数据信息,只包含省市区名称,不包含详细的经纬度、code、等数据
* DETAIL: 包含详细的经纬度、code、省市区数据名称等数据
*/
public enum CityInfoType {
    BASE, DETAIL
}

如果没有特别要求,只是显示基本的省市区名称时,建议选择 BASE 类型,因为 BASEDETAIL 类型所对应的 json 文件大小相差接近 20 倍,所以导致解析速度相差很大。如果需要 code 、经纬度等信息时请选择 DETAIL 类型

数据结构概览

BASE数据结构

json 文件对应于(assets/simple_cities_pro.json),改属性只包含基础的城市名称,而不包含经纬度、code 等值,选择时请根据需要来决定使用哪个 json 文件。

[
    {
        "name":"北京(直辖市)",
        "cityList":[
            {
                "name":"东城区"
            },
            {
                "name":"西城区"
            },
            {
                "name":"崇文区"
            },
            {
                "name":"宣武区"
            },
            Object{...}
        ],

    {
        "name":"天津(直辖市)",
        "cityList":[
            {
                "name":"和平区"
            },
            {
                "name":"河东区"
            },
            {
                "name":"河西区"
            },
            ...
    },

DETAIL数据结构

json 文件对应于(assets/simple_cities_pro_city_dis.json),改属性包含基础的城市名称经纬度(百度、高德)、code、等值,选择时请根据需要来决定使用哪个 json 文件。

"pinYin":"Beijing",
        "id":"110000",
        "gisGcj02Lng":116.409,
        "cityList":[
            {
                "pinYin":"Beijing",
                "id":"110100",
                "gisGcj02Lng":116.408,
                "cityList":[
                    {
                        "id":"110101",
                        "name":"东城区",
                        "status":1,
                        "orderId":null,
                        "createAccount":null,
                        "createTime":null,
                        "modifyAccount":null,
                        "modifyTime":null,
                        "gisBd09Lat":39.935,
                        "gisBd09Lng":116.422,
                        "gisGcj02Lat":39.9288,
                        "gisGcj02Lng":116.416,
                        "stubGroupCnt":1,
                        "pinYin":"Dongcheng"
                    },
                    Object{...},
                    Object{...},
                    Object{...},
                    ...

数据返回

  1. ProvinceBean:表示:省份信息
  2. CityBean:表示:城市信息
  3. DistrictBean:表示:区县信息

返回结果参数说明

ProvinceBean , CityBean , DistrictBean 同样的数据结构

仿 iOS 滚轮实现的选择的结果:

省份数据结构

城市数据结构

区县数据结构

属性说明:

id  //城市 code
name //城市名称
pinYin //城市拼音
gisGcj02Lat //高德坐标系-纬度
gisGcj02Lng //高德坐标系-经度
gisBd09Lat //百度坐标系-纬度
gisBd09Lng //百度坐标系-经度

高仿 iOS 滚轮实现方法说明

  1. textSize(滚轮文字的大小,int 类型,默认为 18)
  2. title(选择器标题,默认为“选择地区”)
  3. titleTextColor(标题文字颜色,默认为 #585858)
  4. titleBackgroundColor(标题栏背景,默认为灰色,#E9E9E9)
  5. confirTextColor(确认按钮字体颜色,默认#0000FF 值)
  6. cancelTextColor(取消按钮字体颜色,默认#000000 值)
  7. province(默认的显示省份,显示选择器后直接定位的 item 位置)
  8. city(默认的显示市,显示选择器后直接定位的 item 位置)
  9. district(默认的显示区,显示选择器后直接定位的 item 位置)
  10. textColor(滚轮文字的颜色 , 默认为 0xFF585858)
  11. provinceCyclic(省份的滚轮是否循环滚动)
  12. cityCyclic(市的滚轮是否循环滚动)
  13. districtCyclic(区的滚轮是否循环滚动)
  14. isShowBackground (是否显示半透明背景 0.5f)
  15. visibleItemsCount(滚轮显示的 item 个数,int 类型,默认为 5 个)
  16. itemPadding(滚轮 item 间距,默认为 5dp)
  17. setCityWheelType(CityConfig.WheelType )(只显示省份滚轮、显示省份和城市滚轮、显示省市区三级滚轮)
  18. setCityInfoType(CityConfig.CityInfoType )(显示加载的城市数据类别,base 和 detail 类型)

更新日志

V2.1.2 版本更新内容(2017.11.16)

  1. 修改返回结果数据结构

V2.1.1 版本更新内容(2017.11.16)

  1. 新增是否显示半透明背景属性
  2. 修复天津地区的数据问题,#67
  3. 修复两级地区选择时,数据返回异常问题,#66
  4. 修改返回结果数据结构
  5. 修复其他 bug

V2.1.0 版本更新内容(2017.11.06)

  1. 更新部分城市数据信息
  2. 修复#41 问题
  3. 修复#58 问题
  4. 修复其他 bug
  5. 优化加载弹出选择器的速度。

V2.0.2 版本更新内容(2017.08.24)

  1. 更新台湾省市区数据
  2. 修复#50 问题

V2.0.1 版本更新内容(2017.08.22)

  1. 修复选中台湾、澳门、香港时崩溃的问题;

V2.0.0 版本更新内容(2017.08.22)

  1. 更丰富的数据结构、包含选择地区的百度、高德经纬度、城市 code 等;
  2. 更全面的全国省市区数据信息;
  3. 优化及修复 bug。

V1.1.0 版本更新内容(2017.05.26)

  1. 增加列表选择器,可获取相关城市的经纬度(百度经纬度)
  2. 修复已知的 bug。

V1.0.0 版本更新内容(2017.03.21)

  1. 修复部分城市数据不全的问题,新增香港、澳门、台湾的数据
  2. 修复#18 问题
  3. 修复#20 问题

V0.9.0 版本更新内容(2017.01.03)

  1. 新增标题字体颜色的属性 titleTextColor
  2. 修复#15 问题

V0.8.0 版本更新内容(2016.12.10)

  1. 新增设置背景透明度的属性
  2. 修复#11 问题
  3. 修复#13 问题
  4. 修复#14 问题

V0.7.0 版本更新内容(2016.11.14)

  1. 修复#10 问题

V0.6.0 版本更新内容(2016.11.09)

  1. 修复部分城市数据不全的问题
  2. 添加修改标题的属性

V0.5.0 版本更新内容(2016.10.28)

  1. 修复当数据源少于 7 个 item 时,设置字体颜色有阴影的 bug

V0.4.0 版本更新内容(2016.10.24)

  1. 新增只显示省市两级联动设置
  2. 新增确认和取消按钮文字颜色的设置
  3. 新增设置默认省市区的设置

V0.3.0 版本更新内容(2016.10.13)

  1. 新增 item 间距属性
  2. 拆分省市区三个滚轮循环显示为分别是否循环滚动
  3. 优化代码结构

V0.2.0 版本更新内容(2016.05.16)

  1. 滚轮是否循环滚动
  2. 新增文字颜色修改
  3. 新增文字大小修改
  4. 新增滚轮内容可见数量

V0.1.0 版本更新内容(2016.05.08)

  1. 直接传入 context 获取省市区信息

关于我

  1. 简书 http://www.jianshu.com/users/18281bdb07ce/latest_articles

  2. 博客 http://crazyandcoder.github.io/

  3. github https://github.com/crazyandcoder

感谢

  1. http://blog.csdn.net/wulianghuan/article/details/41549189
  2. WheelView
随手点击下面广告,支持我维护本站吧
随手点击下面广告支持我免费维护吧
Android 开发经验分享
随手点击下面广告支持本站吧
 
Android 开发经验分享