数字选取器开始更改值几秒钟



我希望数字选择器开始自动更改值几秒钟。

   private void changeValueByOne(final NumberPicker higherPicker, final boolean increment) {
    Method method;
    try {
        // refelction call for
        // higherPicker.changeValueByOne(true);
        method = higherPicker.getClass().getDeclaredMethod("changeValueByOne", boolean.class);
        method.setAccessible(true);
        method.invoke(higherPicker, increment);
    } catch (final NoSuchMethodException e) {
        e.printStackTrace();
    } catch (final IllegalArgumentException e) {
        e.printStackTrace();
    } catch (final IllegalAccessException e) {
        e.printStackTrace();
    } catch (final InvocationTargetException e) {
        e.printStackTrace();
    }
}

我已经实现了这种方法并尝试了

        Thread thread = new Thread() {
        @Override
        public void run() {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
            }
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    changeValueByOne(wp,true);
                }
            });
        }
    };
    thread.start();

但这是不行的.

我想作为老虎机产生效果。

为什么不能简单地将值设置为递增值?像这样:

private void changeValueByOne(final NumberPicker higherPicker) {
   int oldValue = higherPicker.getValue();
   higherPicker.setValue(oldValue++);
}

编辑

以下是您正在反映的方法的来源:

private void changeValueByOne(boolean increment) {
    if (mHasSelectorWheel) {
        mInputText.setVisibility(View.INVISIBLE);
        if (!moveToFinalScrollerPosition(mFlingScroller)) {
            moveToFinalScrollerPosition(mAdjustScroller);
        }
        mPreviousScrollerY = 0;
        if (increment) {
            mFlingScroller.startScroll(0, 0, 0, -mSelectorElementHeight, SNAP_SCROLL_DURATION);
        } else {
            mFlingScroller.startScroll(0, 0, 0, mSelectorElementHeight, SNAP_SCROLL_DURATION);
        }
        invalidate();
    } else {
        if (increment) {
            setValueInternal(mValue + 1, true);
        } else {
            setValueInternal(mValue - 1, true);
        }
    }
}

您可以看到,如果mHasSelectorWheel = true,它将调用 startScroll 方法。换句话说,听起来您的 NumberPicker 已经mHasSelectorWheel = false ,在这种情况下,鉴于您当前的实现,您就不走运了。强烈建议您查看自定义的可滚动数字选择器小部件。

最新更新