NumberPicker ——数字选择器
来源:互联网 发布:淘宝上买cf王者靠谱吗 编辑:程序博客网 时间:2024/06/03 22:56
最近需要做一个数字选择器,找了下没有合适的,就自己写了个。先上效果图
代码很简单,自定义一个HorizontalScrollView,这里有个问题,怎样监控ScrollView是否停止滑动?API只有onScrollChanged接口并不能判断滑动状态,最后在CSDN大神夏安明(不知道是不是这样写)博客找到方法,就是每5毫秒比对一下scrollView的位置,如果不一样说明scrollview还处在滑动状态,否则停止状态。
/** * 用于用户手指离开MyScrollView的时候获取MyScrollView滚动的Y距离,然后回调给onScroll方法 */ private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { int scrollY = CustomHorizontalScrollView.this.getScrollX(); //此时的距离和记录下的距离不相等,在隔5毫秒给handler发送消息 if(lastScrollX != scrollY){ lastScrollX = scrollY; handler.sendMessageDelayed(handler.obtainMessage(), 5); }else {int dpToPx50 = dp2px(_context, 50);if (lastScrollX < dpToPx50/2) {CustomHorizontalScrollView.this.smoothScrollTo(0, 0);_quantity = 0;}else {int yushu = lastScrollX%dpToPx50;_quantity = lastScrollX/dpToPx50;if (yushu != 0) {if (yushu > dpToPx50/2) {CustomHorizontalScrollView.this.smoothScrollTo((lastScrollX/dpToPx50 + 1)*dpToPx50, 0);_quantity = lastScrollX/dpToPx50 + 1;}else {CustomHorizontalScrollView.this.smoothScrollTo((lastScrollX/dpToPx50)*dpToPx50, 0);_quantity = lastScrollX/dpToPx50;}}}_quantity += 1;if (null != listenerScrolled) {listenerScrolled.onNumberPicked(_quantity);}}}; };@Overridepublic boolean onTouchEvent(MotionEvent ev) {lastScrollX = this.getScrollY();switch(ev.getAction()){ case MotionEvent.ACTION_UP: handler.sendMessageDelayed(handler.obtainMessage(), 5); break; } return super.onTouchEvent(ev);}
在这里我检测抬起手指后scrollview的状态,然后通过回调接口把状态传给使用的地方,这里有个简单的计算,就是判断scrollview的X距离(因为是横的scrollview),然后把scrollview的位置设为最近的那个数字(表达不好,看一下代码应该就懂了)。
布局:
结构如图,之所以在scrollview中加了一个relativelayout是因为下面的imageView(就是中间那个蓝色的圈)必须居中,LinearLayout下是数字TextView(这样写把布局写的很死,也可以在JAVA里面动态的写)。
使用时:
final CustomHorizontalScrollView scrollView = (CustomHorizontalScrollView)findViewById(R.id.scrollView);scrollView.setOnScrollListener(new OnScrolled() {@Overridepublic void onNumberPicked(int quantity) {Toast.makeText(MainActivity.this, quantity+"~", Toast.LENGTH_SHORT).show();}});}
想过把这个封装成组件,全部内容集成在一个类里面,但是尝试了一下还是失败了,因为封装在一个类的话很多资源得用代码画出来,太麻烦了,没耐心。。。
这个监控scrollview的接口还可以扩展,scrollview的onScrollChanged是protected,这就意味着在别的地方不可使用,不过可以通过自定义接口把这个官方接口暴露出来,这样就可以在activity里面监控scrollview的各种状态。
源码下载
为毛我上传的gif图不动啊,谁教教我
0 0
- NumberPicker ——数字选择器
- Android数字选择器-NumberPicker
- Android数字选择器-NumberPicker
- Android数字选择器-NumberPicker
- 安卓NumberPicker数字选择器用法
- NumberPicker 选择器
- Android时间选择器TimePicker和数字选择器NumberPicker和TimePickerDialog
- NumberPicker自定义时间选择器
- NumberPicker数值选择器
- 日期选择器 利用NumberPicker
- Android的数字选择器NumberPicker-android学习之旅(三十七)
- Android学习之数字选择器NumberPicker之修改字色字号分割线颜色
- Android 控件 数值选择器 NumberPicker
- Android的NumberPicker数量选择器
- NumberPicker制作省市选择器/时间选择器
- 使用Android组件NumberPicker定制日期选择器
- UI组件:数值选择器(NumberPicker)
- NumberPicker
- 说说我使用的乌班图麒麟ubantukylin14.04
- Cocoa Programming 手动界面---NSTextView (in NSScrollView)
- iOS 整合Settings.bundle显示版本信息
- 大端、小端、网络字节序
- 士大夫士大夫
- NumberPicker ——数字选择器
- webloic连接意外断开,导致应用异常
- Python数据库
- android界面切换的方法
- Nginx RTMP配置文件种HLS部分
- google、百度对比
- java小应用
- inner_product例子
- nis_sort 和 nissort排序函数详解