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



站在巨人的肩膀上,我们才干看得更远

时间: 2024-12-14 04:01:17

AndroidCityPicker仿IOS选择效果的相关文章

Android仿IOS回弹效果 ScrollView回弹 总结

Android仿IOS回弹效果  ScrollView回弹 总结 应项目中的需求  需要仿IOS 下拉回弹的效果 , 我在网上搜了很多 大多数都是拿scrollview 改吧改吧 试了一些  发现总有点小问题 下面的代码是我对大家发布的做了点小修改   觉得没太大问题 package com.example.myscrollview; import android.content.Context; import android.graphics.Rect; import android.util

仿IOS通讯录效果,实现获取手机通讯录、字母排序显示、搜索联系人、拨打电话

1.使用UITableView,实现联系人字母排序.点击字母跳转显示联系人组目录: 2.使用UISearchController,实现联系搜索,动态显示符合查询的联系人: 3.点击通讯录列表项,显示联系人信息(使用自定义模式化窗口类似与UIAlertView,使用UIwindow实现),点击拨号,可以直接拨打电话: 4.实现获取手机通讯录里面的联系人信息: 详情见资源:http://download.csdn.net/detail/u011622479/9505751 效果图如下: 获取联系人:

在uwp仿IOS的页面切换效果

有时候我们需要编写一些迎合IOS用户使用习惯的uwp应用,我在这里整理一下仿IOS页面切换效果的代码. 先分析IOS的页面切换.用户使用左右滑动方式进行前进和后退,播放类似于FlipView的切换动画.导航到新页面时,使用页面前进的动画. UWP自带很多切换效果,位于 Windows.UI.Xaml.Media.Animation 中.与苹果的切换效果最接近的是 PaneThemeTransition (而不是EdgeUIThemeTransition). PaneThemeTransition

jquery仿淘宝规格颜色选择效果

jquery实现的仿淘宝规格颜色选择效果源代码如下 jquery仿淘宝规格颜色选择效果 -收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.2.min.js"></script> <style> dd,dl{zoom:1;ove

&#8203;android第十一期 - SmoothSwitchLibrary仿IOS切换Activity动画效果

项目已经从git上独立出来,各个效果已经分好类别,页面new调用就可以了,不会卡顿. 效果如下图: ​android第十一期 - SmoothSwitchLibrary仿IOS切换Activity动画效果

商城项目实战 | 1.1 Android 仿京东商城底部布局的选择效果 —— Selector 选择器的实现

前言 本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 京东商城的底部布局的选择效果看上去很复杂,其实很简单,这主要是要感谢 selector 选择器,本文将讲解仿照京东商城的底部布局的选择效果,如何实现 selector 选择器,在不同的状态下,给 view 设置不同的背景.京东商城底部布局的选择效果如下. View主要的几种状态 主要状态有8种,设置状态的代码以及相应的含义如下. 1 1. android:state_pr

利用PopupWindow做出仿IOS样式的选择器

项目中总会遇到这样蛋疼的事情,android和ios同样的功能,都用的同样自带的控件,做出来的效果就是:android的丑的不行,ios的挺好看.于是,老大一拍屁股,android的改成和ios样式的一样就好了.然后,android开发就苦比了,凭空多出若干工作量.好了,话不多说,直接上代码吧.下面是我项目遇到的一个仿ios选择器的一个task,我边贴代码边说吧. 首先,看下这个选择器的布局文件. <?xml version="1.0" encoding="utf-8&

提示框第三方库之MBProgressHUD iOS toast效果 动态提示框效果

提示框第三方库之MBProgressHUD iOS toast效果 动态提示框效果 2014-08-11 17:39 11614人阅读 评论(0) 收藏 举报  分类: iOS相关(20)  文章来自:http://blog.csdn.net/ryantang03/article/details/7877120 MBProgressHUD是一个开源项目,实现了很多种样式的提示框,使用上简单.方便,并且可以对显示的内容进行自定义,功能很强大,很多项目中都有使用到.到GitHub上可以下载到项目源码

前端心得---仿IOS拾取器控件(转轮控件)

希望做一个类似IOS拾取器的控件,在IOS上该控件的效果是这样的:,我也把该效果称之为为轮子效果. 要实现这个效果,能够用到的技术点非常简单,无非是transform的translate3d和rotate,不过要想很好的实现,还要建立一个精确的数学模型,来解决如何[摆放]的问题.特别是这个效果不是静态的,需要满足鼠标滑动的时,这个轮子要转起来,这就需要仔细思索了.当然,在最开始重点还是要搞清楚自变量是什么.因变量是什么.它们之间的关系是什么以及该需求的一些性质.找到了好的性质,可以减轻工作量,并