2017-01-20 6 views
0

数字のピッカーを数秒間自動的に値を変更したいと思います。数値ピッカーが数秒間値を変更するのを開始します

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++); 
} 

EDIT

ここでは、あなたが反映しているメソッドのソースです:

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

私はアニメーション効果があるとは思わないが、リスト内でスクロールするような効果を持たせたい。設定値を使用すると、ちょうどwitoutアニメーションが設定されます –

+1

例外が発生していますか?反射は扱いにくいかもしれません...あなたはカスタムナンバーピッカーウィジェットを見つけることを検討したいかもしれません(またはAndroidソースをコピーして自分で修正する) –

+0

私は例外を取得しません。あなたがその値にスクロールしたように見えますが、私のコードではただの価値があります。私はスロットマシンのような効果が欲しい。ボタンを押すと数字ピッカーが自転し始めます。 –

関連する問題