开源控件滚动选择器WheelView学习笔记 & 省市区联动选择器
来源:互联网 发布:centos下制作u盘启动 编辑:程序博客网 时间:2024/06/05 03:40
大神写控件,小的学习之。
开源控件Wheel效果一览
开源项目博客:
http://android-devblog.blogspot.com/2010/05/wheel-ui-contol.html
介绍了该控件,以及设计原理,看过之后对该控件进行改造有帮助。
下载源码通读了一遍,好在能看懂,膜拜之。
原组件已经十分成熟和方便使用,附带的demo也演示了各种用法。
但这貌似是3年前的项目,源码对组件的界面风格已经在源代码确定,是如上图实体风格。
刚好找到另外一篇文章在此控件的基础上完成了省市区三级联动的选择器,他将Wheel的风格修改成了当下流行的扁平简约风格
详见:Android省市区三级联动滚轮选择
效果图:(性别选择是我的测试)
下面将关于界面风格的几处代码贴出来,需要修改风格在这些地方修改。
有时间将这些地方抽成方法应该就更方便了。
界面的绘制都在WheelView.java之中。
1、滚动项目顶部底部阴影颜色。注释中为原组件实体风格。
/** Top and bottom shadows colors *//* * / Modified by wulianghuan 2014-11-25 private int[] SHADOWS_COLORS = new * int[] { 0xFF111111, 0x00AAAAAA, 0x00AAAAAA }; // */private int[] SHADOWS_COLORS = new int[] { 0xefE9E9E9, 0xcfE9E9E9,0x3fE9E9E9 };
/** * Draws shadows on top and bottom of control * * @param canvas * the canvas for drawing */private void drawShadows(Canvas canvas) {// by wkw1125 @2015-9-22 20:22:04 根据可见项数量调整阴影大小int itemCount = getVisibleItems();double ratio = 0.0;if (itemCount <= 1) {ratio = 0.1;} else if (itemCount <= 3) {ratio = 0.5;} else {ratio = 1.5;}// int height = (int)(1.5 *getItemHeight());int height = (int) (ratio * getItemHeight());topShadow.setBounds(0, 0, getWidth(), height);topShadow.draw(canvas);bottomShadow.setBounds(0, getHeight() - height, getWidth(), getHeight());bottomShadow.draw(canvas);}
3、中部选中内容的边框。原组件是绘制了一个渐变宽,由上文作者改成了两条线。
/** * Draws rect for current value * * @param canvas * the canvas for drawing */private void drawCenterRect(Canvas canvas) {int center = getHeight() / 2;int offset = (int) (getItemHeight() / 2 * 1.2);// Remarked by wulianghuan 2014-11-27 使用自己的画线,而不是描边// centerDrawable.setBounds(0, center - offset, getWidth(), center +// offset);// centerDrawable.draw(canvas);Paint paint = new Paint();// 线颜色paint.setColor(getResources().getColor(R.color.province_line_border));// 设置线宽paint.setStrokeWidth((float) 1);// 绘制上边直线canvas.drawLine(0, center - offset, getWidth(), center - offset, paint);// 绘制下边直线canvas.drawLine(0, center + offset, getWidth(), center + offset, paint);//}
4、关于文本颜色、字体大小等,则是在适配器中设置的。
// 文本内容String[] sexs = { "男", "女", "男", "女", "男", "女", "男", "女" };ArrayWheelAdapter<String> sexadapter = new ArrayWheelAdapter<String>(this, sexs);// 文本颜色sexadapter.setTextColor(getResources().getColor(R.color.blue));// 文本大小sexadapter.setTextSize(20);mViewSex.setViewAdapter(sexadapter);// 可见数目,默认是5mViewSex.setVisibleItems(3);
5、对滚动项使用自定义布局,同样是在适配器中设置
sexadapter.setItemResource(R.layout.tab_item);
6、修改默认项目高度ItemHeight。
若适配器没有指定setItemResource,wheel将默认地使用一个TextView作为项目布局,因此其高度只受其文本大小影响。
改变默认Textview属性,增加padding,在AbstractWheelTextAdapter.java修改代码如下
/** * Configures text view. Is called for the TEXT_VIEW_ITEM_RESOURCE views. * * @param view * the text view to be configured */protected void configureTextView(TextView view) {view.setTextColor(textColor);view.setGravity(Gravity.CENTER);view.setTextSize(textSize);view.setEllipsize(TextUtils.TruncateAt.END);view.setLines(1);// by wkw1125 设置padding以撑高ItemHeightview.setPadding(0, 20, 0, 20);// 字体设置// view.setCompoundDrawablePadding(20);// view.setTypeface(Typeface.SANS_SERIF);}
7、可见项数量和整个wheel控件高度实际上是动态计算得到的:
若在主布局文件中指定wheel的高度,如250dp,将根据滚动项的高度(如50)计算得到可见数量=250/50=5;此时设置setVisibleItems无效。
若在主布局文件中指定wheel高度为wrap_content,此时根据setVisibleItems的值来显示可见属性,默认为5.(此时wheel的高度由可见数量*项高度决定。)
自定义布局,与增加默认项高度的效果如下:
最后,整合了wheel源码以及的demo,以及修改阴影大小后的省市区三级联动选择器代码, 以待后用。
android开源滚动选择器wheel&demo&省市区地址选择器
感谢原作者!
/** * Configures text view. Is called for the TEXT_VIEW_ITEM_RESOURCE views. * * @param view * the text view to be configured */protected void configureTextView(TextView view) {view.setTextColor(textColor);view.setGravity(Gravity.CENTER);view.setTextSize(textSize);view.setEllipsize(TextUtils.TruncateAt.END);view.setLines(1);// by wkw1125 设置padding以撑高ItemHeightview.setPadding(0, 20, 0, 20);// 字体设置// view.setCompoundDrawablePadding(20);// view.setTypeface(Typeface.SANS_SERIF);}
- 开源控件滚动选择器WheelView学习笔记 & 省市区联动选择器
- WheelView滚动选择器
- wheelview--滚动效果的日期选择器View
- Android 地址选择器,实现省市区三级联动
- Android_全国省市区-三级联动 时间选择器
- Android 地址选择器,实现省市区三级联动
- 一秒集成省市区三级联动选择器
- 移动端省市区三级联动选择器
- 安卓学习笔记---Android-PickerView实现 3D滚轮效果(时间选择器、省市区三级联动,单项选择效果)
- 第三方开源库:日期时间选择器(TimePickerDialog)+ 省市区三级联动(CityPicker) + 一级滚动
- Android笔记(22)Wheelview选择器
- 省市区选择器
- 学习笔记:实现二维的滚动选择控件WheelView
- Android(开源项目) 滑动选择器 WheelView 源码
- android WheelView时间选择器
- 时间选择器wheelView
- 自定义滚轮选择器Wheelview
- sencha Touch 省市区三级联动滚轮效果选择器
- 百度地图功能介绍、申请秘钥的方法、配置环境的步骤
- Learning Addition
- 高效开发Android App的10个建议
- 算法导论11.1直接寻址表 练习总结
- 使用元组实现单次方法调用返回多个对象
- 开源控件滚动选择器WheelView学习笔记 & 省市区联动选择器
- birt+maven+web运行环境搭建
- HDOJ 2057 A + B Again (十六进制)
- pLSA/mixture unigram/gmm em算法公式汇总
- 树莓派与夜视摄像头
- Unity3D学习笔记(八) 动画编辑器(animation窗口)
- leetcode之 median of two sorted arrays
- POJ 2456 Aggressive cows (二分 + 贪心)
- 在网上看到的一个挺好的Map排序