通过点击的方式切换,没有滑动回调。
guominfang opened this issue · 4 comments
我是直接使用:
<com.loper7.date_time_picker.number_picker.NumberPicker android:id="@+id/dateTimePicker2" android:layout_width="match_parent" android:layout_height="@dimen/dp_50" android:layout_marginTop="@dimen/dp_12" app:layout_constraintTop_toBottomOf="@id/tv_tip_cl2" app:np_dividerColor="@android:color/transparent" app:np_max="40" app:np_min="1" app:np_orientation="horizontal" app:np_selectedTextColor="@color/vm_color_brand_hover" app:np_selectedTextSize="@dimen/sp_16" app:np_textColor="@color/vm_color_text_01" app:np_textSize="@dimen/sp_14" app:np_value="12" app:np_wheelItemCount="7" app:np_wrapSelectorWheel="false" />
- 通过点击的方式切换,选项,无法正确的选中点击的选项,同时setOnScrollListener方法没有回调。
建议公开:mScrollState属性,如果我通过setOnValueChangedListener的值来获取选中的选项,会回调太频繁
实际问题,是滑动状态错误
不太理解你说的意思
如果你想在任何时候获取picker的值 可以通过picker.value 来获取
场景是这样的:
需求:在控件滑动切换结束时,获取当前值的。
方案1: 我设置了setOnScrollListener来监听控件的滑动状态,但是,当前我通过点击,控件会自动切换下一项,但是没有触发scrollListener回调
方案2: 通过设置setOnValueChangedListener,来监听最新值,但是这个回调太频繁,而且这里有问题,例如:原本是选项是2,通过点击切换,最新值会回调:3->2->3,回调三次
所以,有什么方案可以获取到,控件停止滑动时,当前的值吗
`
binding.dateTimePicker2.setOnScrollListener((view, scrollState) -> {
Log.d("gmf", "showStreamerdelayCl2: scrollState=" + scrollState);
Log.d("gmf", "showStreamerdelayCl2: " + view.getValue());
if (scrollState == SCROLL_STATE_FLING) {
}
});
binding.dateTimePicker2.setOnValueChangedListener((picker, oldVal, newVal) -> {
Log.d("gmf", "showStreamerdelayCl2: oldVal= " + oldVal);
Log.d("gmf", "showStreamerdelayCl2: newVal=" + newVal);
Log.d("gmf", "showStreamerdelayCl2: newVal=" + (int) (newVal / 2f * 1000));
}
);
`
这个目前没有很好的方法解决,如果你接受不了方案二频繁回调的话,我的建议是自己使用numberpicker类似的控件替换掉控制器内的numberpicker,因为仓库内的numberpicker是基于android number picker来修改的,这段时间比较忙,所以可能没有充足的时间来更新。
在手动点击触发值发生变更的时候调一下onScrollStateChange,这样应该可以比较友好的处理方案1的问题,你有时间的话,可以pull代码修改自己使用~