项目中用到省市区滚动选择器,网上找到了很多相关文章,很多不完善也并不符合要求,下边是自己参考几篇博客写出的效果:
参考博客:http://www.voidcn.com/article/p-puphyori-ns.html
将博客demo下载下来,其结构为:
demo中的MainActivity即是省市区滚轮选择器所依附的界面,Activity可以实现多种效果和样式,例如屏幕中间弹出,底部滑出等;项目中我实现的是从底部滑入和滑出的效果。
自定义一个style样式:
@anim/dialog_animation_enter
@anim/dialog_animation_exit
@style/AnimBottom
@null
true
true
true
@android:color/transparent
true
在清单文件中将滚动选择器所在的MainActivity的主题设置为这个样式:
android:theme="@style/MyDialogStyleBottom"
并且在MainActivity中的setContentView方法后设置全屏:
getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
然后再res目录下创建两个动画效果:
dialog_animation_enter:
dialog_animation_exit:
所有效果设置完毕,MainActivity这个界面可以在任何你需要弹出地址选择的地方启动。
双联滚动:
修改目录layout中的布局xml
android:id="@+id/id_province"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" >
android:id="@+id/id_city"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" >
android:id="@+id/id_district"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" >
删掉其中的一个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(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(this, areas));
// mViewDistrict.setCurrentItem(0);
}
单联滚动跟上述同理。
注意:
省市区数据源在assets目录下