在最近的需求开发当中,我们产品经理说需要增加一个类似于美团
或者大众点评
的城市选择界面
。我当时就在想有没有办法快速实现,在不搞太多自己公司App的特色元素的时候,是有这样的库的,这篇文章的主角CityPicker
库。分享这个库给大家,希望能提高大家的开发效率。
CityPicker
CityPicker库文档,感兴趣的小伙伴可以去看看详情文档。这个库需要我们自己集成地图SDK,你可以设置地图上面的当前定位城市。
简单的代码示例
1.我是通过高德地图获取当前定位城市,设置定位城市到控件里面,提高给大家参考:
// 城市的Code
private var mAdCode:String = ""
// 城市名称
private var mCity:String = ""
private fun setCity() {
val mLocationClient = AMapLocationClient(this)
val mLocationOption = AMapLocationClientOption()
//高精度模式
mLocationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
//定位请求超时时间
mLocationOption.httpTimeOut = 50000
// 关闭缓存机制
mLocationOption.isLocationCacheEnable = false
// 设置是否只定位一次
mLocationOption.isOnceLocation = true
//设置参数
mLocationClient.setLocationOption(mLocationOption)
// 启动定位
mLocationClient.startLocation()
//定位监听
mLocationClient.setLocationListener { aMapLocation ->
//定位成功之后取消定位
mLocationClient.stopLocation()
if (aMapLocation != null && aMapLocation.errorCode == 0) {
binding.cityText.text = aMapLocation.city
mAdCode = aMapLocation.cityCode
mCity = aMapLocation.city
mProvince = aMapLocation.province
// 设置高德地图城市数据到控件里面
CityPicker.setGpsCityByAMap(mCity,mAdCode)
} else {
ToastUtils.show("定位失败,请重新定位")
}
}
2.调用CityPicker
控件,注意我的热门城市是设置了广州、深圳、东莞:
// 设置定位城市
CityPicker.setGpsCityByAMap(mCity,mAdCode)
// 打开城市选择界面
CityPicker.with(this)
.setMaxHistory(0)
.setHotCitiesId("224","107","86")
.setOnCityPickerCallBack {
// 选择城市的回调
}
.open()
大概的使用代码就这些,如果要深入自定义业务相关的元素,我个人建议还是在这个基础上面修改就好了。