AndroidCityPicker仿IOS选择效果
近期的一个项目由于android端与IOS端须要同步,所以在城市选择器这里做了一个相似IOS的CityPicker控件,当然由于本人水平问题显示效果比IOS上面还是有一定差距的。OK先让大家看下效果。
由于项目中是一个两级连选,所以这个DEMO仅仅用也就没有放上县级的数据。假设有须要实现三级连选的朋友。能够參照代码加上即可了。
内部使用的WheelView控件来自https://github.com/wangjiegulu/WheelView,在他的基础上进行和一些改动了备注,使他更适合于进行3级的城市连选,须要的朋友能够下载下来看一下。
附上部分代码片段。
数据的获取,全部的数据来自于CityManage对象。
public class CityManage {
private SQLiteDatabase database;
public CityManage(Context context){
database = CityDatabase.openDatabase(context);
}
/**
* 获取全部的省市名称
*/
public List<String> getAllNames(){
List<String> result = new ArrayList<>();
Cursor cursor = database.query("region",new String[]{"name"},null,null,null,null,null);
while (cursor.moveToNext()){
result.add(cursor.getString(0));
}
return result;
}
/**
* 获取全部省的名称
*/
public List<String> getProvinceNames(){
List<String> result = new ArrayList<>();
Cursor cursor = database.query("region",new String[]{"name"},"parent_id = 1",null,null,null,null,null);
while (cursor.moveToNext()){
result.add(cursor.getString(0));
}
return result;
}
/**
* 依据省市的ID获取省市的名称
*/
public String getProvinceNameFromProvinceId(String provinceId){
String result = "找不到桑";
Cursor cursor = database.query("region",new String[]{"name"},"region_id = ?
",new String[]{provinceId},null,null,null,null);
while (cursor.moveToNext()){
result = cursor.getString(0);
}
return result;
}
/**
* 依据省市的名称获取省市的ID
*/
public String getProvinceIdFromProvinceName(String provinceName){
String result = "找不到桑";
Cursor cursor = database.query("region",new String[]{"region_id"},"name = ?",new String[]{provinceName},null,null,null,null);
while (cursor.moveToNext()){
result = cursor.getString(0);
}
return result;
}
/**
* 依据省的ID获取它包括的全部市的名称
*/
public List<String> getCityNameFromProvinceId(String provinceId){
List<String> result = new ArrayList<>();
Cursor cursor = database.query("region",new String[]{"name"},"parent_id = ?",new String[]{provinceId},null,null,null,null);
while (cursor.moveToNext()){
result.add(cursor.getString(0));
}
return result;
}
/**
* 依据省的ID获取它包括的全部市的模型
*/
public List<CityModel> getCityModelFromProvinceId(String provinceId){
List<CityModel> result = new ArrayList<>();
Cursor cursor = database.query("region",null,"parent_id = ?",new String[]{provinceId},null,null,null,null);
while (cursor.moveToNext()){
CityModel cityModel = new CityModel();
//城市ID
int indexId = cursor.getColumnIndex("region_id");
cityModel.setCityId(cursor.getString(indexId));
//城市名
int indexCityName = cursor.getColumnIndex("name");
cityModel.setCityName(cursor.getString(indexCityName));
//所属省ID
int indexProvinceId = cursor.getColumnIndex("parent_id");
cityModel.setProvinceId(cursor.getString(indexProvinceId));
//所属省名称
cityModel.setProvinceName(getProvinceNameFromProvinceId(cityModel.getProvinceId()));
result.add(cityModel);
}
return result;
}
/**
* 依据省市的ID获取省市的模型
*/
public CityModel getCityModelFormCityId(String cityId){
CityModel result = new CityModel();
Cursor cursor = database.query("region",null,"region_id = ?
",new String[]{cityId},null,null,null,null);
while (cursor.moveToNext()){
//城市ID
int indexId = cursor.getColumnIndex("region_id");
result.setCityId(cursor.getString(indexId));
//城市名
int indexCityName = cursor.getColumnIndex("name");
result.setCityName(cursor.getString(indexCityName));
//所属省ID
int indexProvinceId = cursor.getColumnIndex("parent_id");
result.setProvinceId(cursor.getString(indexProvinceId));
//所属省名称
result.setProvinceName(getProvinceNameFromProvinceId(result.getProvinceId()));
}
return result;
}
/**
* 依据省市的名称获取省市的模型
*/
public CityModel getCityModelFormCityName(String cityName){
CityModel result = new CityModel();
Cursor cursor = database.query("region",null,"name = ?",new String[]{cityName},null,null,null,null);
while (cursor.moveToNext()){
//城市ID
int indexId = cursor.getColumnIndex("region_id");
result.setCityId(cursor.getString(indexId));
//城市名
int indexCityName = cursor.getColumnIndex("name");
result.setCityName(cursor.getString(indexCityName));
//所属省ID
int indexProvinceId = cursor.getColumnIndex("parent_id");
result.setProvinceId(cursor.getString(indexProvinceId));
//所属省名称
result.setProvinceName(getProvinceNameFromProvinceId(result.getProvinceId()));
}
return result;
}
}
连选关键
wvProvince.setOnWheelViewListener(new WheelView.OnWheelViewListener(){
@Override
public void onSelected(int selectedIndex, String item) {
super.onSelected(selectedIndex, item);
//又一次初始化城市数据
cityList = cityManage.getCityNameFromProvinceId(cityManage.getProvinceIdFromProvinceName(item));
//替换显示数据
wvCity.replace(cityList);
wvCity.setSeletion(0);
}
});
对这个有兴趣的朋友把源代码下载下来看一下。
源代码下载地址: http://download.csdn.net/detail/u011068996/8983575
站在巨人的肩膀上,我们才干看得更远
AndroidCityPicker仿IOS选择效果的更多相关文章
- Android仿IOS回弹效果 ScrollView回弹 总结
Android仿IOS回弹效果 ScrollView回弹 总结 应项目中的需求 须要仿IOS 下拉回弹的效果 , 我在网上搜了非常多 大多数都是拿scrollview 改吧改吧 试了一些 发现总 ...
- Android 实现高仿iOS桌面效果之可拖动的GridView(上)
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/40074663,作者:skay 最近项目中遇到一个LIstview的拖动效 ...
- Android-PickerView【仿iOS的PickerView控件,并封装了时间选择和选项选择这两种选择器】使用
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本文主要演示Android-PickerView的选项选择器.时间选择器的简单运用.由于每一个版本略有不用,所以实际使用方式以git ...
- jquery仿淘宝规格颜色选择效果
jquery实现的仿淘宝规格颜色选择效果源代码如下 jquery仿淘宝规格颜色选择效果 -收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script t ...
- 商城项目实战 | 1.1 Android 仿京东商城底部布局的选择效果 —— Selector 选择器的实现
前言 本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 京东商城的底部布局的选择效果看上去很复杂,其实很简单,这主要是要 ...
- iOS仿支付宝首页效果
代码地址如下:http://www.demodashi.com/demo/12776.html 首先看一下效果 状态栏红色是因为使用手机录屏的原因. 1.问题分析 1.导航栏A有两组控件,随着tabl ...
- 在uwp仿IOS的页面切换效果
有时候我们需要编写一些迎合IOS用户使用习惯的uwp应用,我在这里整理一下仿IOS页面切换效果的代码. 先分析IOS的页面切换.用户使用左右滑动方式进行前进和后退,播放类似于FlipView的切换动画 ...
- 自己定义控件:onDraw 方法实现仿 iOS 的开关效果
概述 本文主要解说怎样在 Android 下实现高仿 iOS 的开关按钮,并不是是在 Android 自带的 ToggleButton 上改动,而是使用 API 提供的 onDraw.onMeasur ...
- uni-app自定义Modal弹窗组件|仿ios、微信弹窗效果
介绍 uniapp自定义弹窗组件uniPop,基于uni-app开发的自定义模态弹窗|msg信息框|alert对话框|confirm确认框|toast弱提示框 支持多种动画效果.多弹窗类型ios/an ...
随机推荐
- Leetcode 396.旋转函数
旋转函数 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * Bk[0] ...
- ImportError: No module named ‘MySQLdb'
1.APP未注册 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contentty ...
- C/C++ 位操作
C/C++对位操作有如下方法: <1>位操作运算符(注意:下面几个运算符不改变原来的变量的值,只是获得运算的结果即一个新值) 按位取反:~ 位与:& 位或:| 位异或:^ 左移位运 ...
- MySQL5.7 服务 crash 后无法启动
事发背景 测试环境更换数据盘,直接采取在线将数据目录暴力拷贝到新盘,然后将原服务关闭,启用新盘. 服务是可以正常启动的,但是没多会开发就反应服务down了,错误日志输出 -- :: InnoDB: F ...
- Python之Regular Expressions(正则表达式)
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 很可能你使用过Windows/Dos下用 ...
- 【倒跑并查集维护连通块】NCPC 2016 A. Artwork
http://codeforces.com/gym/101550/attachments [AC] #include<bits/stdc++.h> using namespace std; ...
- Perl语言入门--1--perl的包安装
A. 手工安装 从CPAN下载了DBI模块1.13版的压缩文件DBI-1.13.tar.gz.假设放在/usr/local/src(一般需要编译安装的软件,都放在此目录下安装). # cd /usr ...
- Post Content_Length exceeds the limit
2017.12,公司市场专员反馈我在公司开发与维护的iOS包内审系统在上传ipa包文件的时候报错了.经过调试发现原来是因为上传的文件太大导致报错(由下图可知,接收方允许的最大请求内容为128M,但我们 ...
- Java 新手的通病
一:对算法和数据结构不熟悉 为什么我先拿“数据结构和算法”说事捏?这玩意是写程序最最基本的东东.不管你使用 Java 还是其它的什么语言,都离不开它.而且这玩意是跨语言的,学好之后不管在哪门语言中都能 ...
- eslint 在webstorm配置
1.安装nodejs和eslint 2.在 webstorm 的 file - setting搜索eslint,配置eslint路径 3.在项目目录下新建.eslintrc文件 4.配置eslint ...