[置顶] Android省市区一,二,三联滚动选择器(使用Dialog样式的Activity实现)
2017-01-13 13:45
603 查看
项目中用到省市区滚动选择器,网上找到了很多相关文章,很多不完善也并不符合要求,下边是自己参考几篇博客写出的效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/09/cef648481ee103f023f9df2e263eb291)
参考博客:http://blog.csdn.net/wulianghuan/article/details/41549189
将博客demo下载下来,其结构为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/09/a75c0042199d6d64181b4a0915d143b5)
demo中的MainActivity即是省市区滚轮选择器所依附的界面,Activity可以实现多种效果和样式,例如屏幕中间弹出,底部滑出等;项目中我实现的是从底部滑入和滑出的效果。
自定义一个style样式:
在清单文件中将滚动选择器所在的MainActivity的主题设置为这个样式:
并且在MainActivity中的setContentView方法后设置全屏:
然后再res目录下创建两个动画效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/09/6d5d8804f681d6f1dbf4257ad8e71d83)
dialog_animation_enter:
dialog_animation_exit:
所有效果设置完毕,MainActivity这个界面可以在任何你需要弹出地址选择的地方启动。
删掉其中的一个WheelView
并且在MainActivity中注掉这四个方法中的一部分代码即可:
单联滚动跟上述同理。
参考博客:http://blog.csdn.net/wulianghuan/article/details/41549189
将博客demo下载下来,其结构为:
demo中的MainActivity即是省市区滚轮选择器所依附的界面,Activity可以实现多种效果和样式,例如屏幕中间弹出,底部滑出等;项目中我实现的是从底部滑入和滑出的效果。
自定义一个style样式:
<style name="AnimBottom" parent="@android:style/Animation"> <!-- 窗体启动动画 --> <item name="android:windowEnterAnimation">@anim/dialog_animation_enter</item> <!-- 窗体关闭动画 --> <item name="android:windowExitAnimation">@anim/dialog_animation_exit</item> </style> <style name="MyDialogStyleBottom" parent="@android:style/Theme.Dialog"> <!-- 窗体启动关闭动画 --> <item name="android:windowAnimationStyle">@style/AnimBottom</item> <!-- 窗体边框 --> <item name="android:windowFrame">@null</item> <!-- 窗体是否浮现在activity之上 --> <item name="android:windowIsFloating">true</item> <!-- 窗体半透明 --> <item name="android:windowIsTranslucent">true</item> <!-- 窗体无标题 --> <item name="android:windowNoTitle">true</item> <!-- 窗体背景 --> <item name="android:windowBackground">@android:color/transparent</item> <!-- 窗体背景模糊 --> <item name="android:backgroundDimEnabled">true</item> </style>
在清单文件中将滚动选择器所在的MainActivity的主题设置为这个样式:
android:theme="@style/MyDialogStyleBottom"
并且在MainActivity中的setContentView方法后设置全屏:
getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
然后再res目录下创建两个动画效果:
dialog_animation_enter:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="100%p" android:duration="400"/> </set>
dialog_animation_exit:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:toYDelta="100%p" android:duration="400"/> </set>
所有效果设置完毕,MainActivity这个界面可以在任何你需要弹出地址选择的地方启动。
双联滚动:
修改目录layout中的布局xml<kankan.wheel.widget.WheelView android:id="@+id/id_province" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" > </kankan.wheel.widget.WheelView> <kankan.wheel.widget.WheelView android:id="@+id/id_city" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" > </kankan.wheel.widget.WheelView> <kankan.wheel.widget.WheelView android:id="@+id/id_district" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" > </kankan.wheel.widget.WheelView>
删掉其中的一个WheelView
并且在MainActivity中注掉这四个方法中的一部分代码即可:
private void setUpViews() { mViewProvince = (WheelView) findViewById(R.id.id_province); mViewCity = (WheelView) findViewById(R.id.id_city); //mViewDistrict = (WheelView) findViewById(R.id.id_district); mBtnConfirm = (Button) findViewById(R.id.btn_confirm); } private void setUpListener() { // 添加change事件 mViewProvince.addChangingListener(this); // 添加change事件 mViewCity.addChangingListener(this); // 添加change事件 // mViewDistrict.addChangingListener(this); // 添加onclick事件 mBtnConfirm.setOnClickListener(this); } private void setUpData() { initProvinceDatas(); mViewProvince.setViewAdapter(new ArrayWheelAdapter<String>(BaseActivity.this, mProvinceDatas)); // 设置可见条目数量 mViewProvince.setVisibleItems(7); mViewCity.setVisibleItems(7); //mViewDistrict.setVisibleItems(7); updateCities(); updateAreas(); } /** * 根据当前的市,更新区WheelView的信息 */ private void updateAreas() { int pCurrent = mViewCity.getCurrentItem(); mCurrentCityName = mCitisDatasMap.get(mCurrentProviceName)[pCurrent]; String[] areas = mDistrictDatasMap.get(mCurrentCityName); if (areas == null) { areas = new String[] { "" }; } // mViewDistrict.setViewAdapter(new ArrayWheelAdapter<String>(this, areas)); // mViewDistrict.setCurrentItem(0); }
单联滚动跟上述同理。
注意:
省市区数据源在assets目录下相关文章推荐
- Android实现可使用自定义透明Dialog样式的Activity完整实例
- Android:使用自定义透明Dialog样式的Activity
- Android开发丶使用DialogFragment实现炫酷的登录界面并实现DialogFragment与宿主Activity的通信
- android中使用Dialog实现目录选择器
- Android Activity使用Dialog样式导致点击空白处自动关闭的问题解决
- Android Dialog样式的Activity的实现
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- [置顶] Android_Loader_使用LoaderManager管理Loader实现异步动态加载数据
- 使用自定义透明Dialog样式的Activity
- android overridePendingTransition()使用(切换activity动画实现)
- Activity使用Dialog样式导致点击空白处自动关闭的问题
- Android组件之使用ScrollView实现屏幕滚动【防止屏幕不够用】
- Android提高篇之自定义dialog实现processDialog“正在加载”效果、使用Animation实现图片旋转
- Android使用Intent实现Activity之间的跳转
- android selector 背景选择器的使用, button (未点击,点击,选中保持状态)效果实现
- 【Android】使用Intent实现Activity之间的跳转(创建一个Activity的过程)
- 总结如何实现Android浮动层,主要是dialog的使用。
- android canvas中translate函数的使用,可以通过translate函数来实现滚动的功能
- Android 使用Scroller自动滚动第一种实现
- 使用自定义透明Dialog样式的Activity