2017-01-20 49 views
0

我想一個numberpicker開始全自動改變值幾秒鐘改變值。號選擇器啓動幾秒鐘

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(); 

但它並不確定。

我想有作爲投幣機的效果。

回答

1

你爲什麼不能簡單地將值設置爲一個增量的價值?事情是這樣的:

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,在這種情況下,你在外面鑑於你目前執行的運氣。強烈建議您查看自定義的可滾動數字選擇器小部件。

+0

我不覺得不會讓我有動畫效果,我想就像你在它只會設置不用其他動畫 –

+1

,能得到任何異常,或不運行的代碼罰款清單。隨着設定值滾動到產生效果?反射可能會很棘手...你可能想要考慮找到一個自定義數字選擇器小部件(或複製Android源代碼並自己修改它) –

+0

我不會得到例外,我只是當我設置值有一個動畫,是看起來像你滾動到那個價值,與我的代碼它只是立即帶來了這個價值。我想要一個像老虎機一樣的效果。按一個按鈕,號碼選擇器自己開始滾動。 –