天天看點

Android數字選擇器-NumberPicker

數字選擇器NumberPicker是Android3.0之後引入的一個控件,比較常用,比如說手機常用的鬧鐘,可以選擇小時和分鐘,如果你需要相容3.0之前版本,GitHub上有開源的項目,具體的下載下傳位址https://github.com/SimonVT/android-numberpicker。本人就沒有使用開源的項目,就簡單的使用了NumberPicker顯示一下效果,開始正題吧:

開發東西先看下效果吧:

Android數字選擇器-NumberPicker

NumberPicker和TextView顯示一下時間,線性布局,看下布局檔案吧:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

<code>&lt;LinearLayout xmlns:android=</code><code>"http://schemas.android.com/apk/res/android"</code>

<code>    </code><code>xmlns:tools=</code><code>"http://schemas.android.com/tools"</code>

<code>    </code><code>android:layout_width=</code><code>"fill_parent"</code>

<code>    </code><code>android:layout_height=</code><code>"wrap_content"</code>

<code>    </code><code>android:orientation=</code><code>"vertical"</code>

<code>    </code><code>tools:context=</code><code>"com.example.googlenumberpicker.MainActivity"</code> <code>&gt;</code>

<code>    </code><code>&lt;LinearLayout</code>

<code>        </code><code>android:layout_width=</code><code>"fill_parent"</code>

<code>        </code><code>android:layout_height=</code><code>"wrap_content"</code>

<code>        </code><code>android:layout_marginTop=</code><code>"30dp"</code>

<code>        </code><code>android:layout_marginLeft=</code><code>"50dp"</code>

<code>        </code><code>android:layout_gravity=</code><code>"center_horizontal"</code> <code>&gt;</code>

<code>        </code><code>&lt;NumberPicker</code>

<code>            </code><code>android:id=</code><code>"@+id/hourpicker"</code>

<code>            </code><code>android:layout_width=</code><code>"40dp"</code>

<code>            </code><code>android:layout_height=</code><code>"wrap_content"</code> <code>/&gt;</code>

<code>        </code><code>&lt;TextView</code>

<code>            </code><code>android:layout_width=</code><code>"wrap_content"</code>

<code>            </code><code>android:layout_height=</code><code>"wrap_content"</code>

<code>            </code><code>android:layout_gravity=</code><code>"center_vertical"</code>

<code>            </code><code>android:text=</code><code>"時"</code> <code>/&gt;</code>

<code>            </code><code>android:id=</code><code>"@+id/minuteicker"</code>

<code>            </code><code>android:text=</code><code>"分"</code> <code>/&gt;</code>

<code>    </code><code>&lt;/LinearLayout&gt;</code>

<code>&lt;/LinearLayout&gt;</code>

數字選擇是可以滑動,是以需要定義一個OnValueChangeListener事件,OnScrollListener滑動事件,Formatter事件:

Formatter事件:

<code>public</code> <code>String format(</code><code>int</code> <code>value) {</code>

<code>       </code><code>String tmpStr = String.valueOf(value);</code>

<code>       </code><code>if</code> <code>(value &lt; </code><code>10</code><code>) {</code>

<code>           </code><code>tmpStr = </code><code>"0"</code> <code>+ tmpStr;</code>

<code>       </code><code>}</code>

<code>       </code><code>return</code> <code>tmpStr;</code>

<code>   </code><code>}</code>

 OnValueChangeListener事件:

<code>public</code> <code>void</code> <code>onValueChange(NumberPicker picker, </code><code>int</code> <code>oldVal, </code><code>int</code> <code>newVal) {</code>

<code>      </code><code>Toast.makeText(</code>

<code>              </code><code>this</code><code>,</code>

<code>              </code><code>"原來的值 "</code> <code>+ oldVal + </code><code>"--新值: "</code>

<code>                      </code><code>+ newVal, Toast.LENGTH_SHORT).show();</code>

<code>  </code><code>}</code>

OnScrollListener滑動事件,滑動事件有三個狀态:

SCROLL_STATE_FLING:手離開之後還在滑動

SCROLL_STATE_IDLE:不滑動

SCROLL_STATE_TOUCH_SCROLL:滑動中

<code>public</code> <code>void</code> <code>onScrollStateChange(NumberPicker view, </code><code>int</code> <code>scrollState) {</code>

<code>      </code><code>switch</code> <code>(scrollState) {</code>

<code>      </code><code>case</code> <code>OnScrollListener.SCROLL_STATE_FLING:</code>

<code>          </code><code>Toast.makeText(</code><code>this</code><code>, </code><code>"後續滑動(飛呀飛,根本停下來)"</code><code>, Toast.LENGTH_LONG)</code>

<code>                  </code><code>.show();</code>

<code>          </code><code>break</code><code>;</code>

<code>      </code><code>case</code> <code>OnScrollListener.SCROLL_STATE_IDLE:</code>

<code>          </code><code>Toast.makeText(</code><code>this</code><code>, </code><code>"不滑動"</code><code>, Toast.LENGTH_LONG).show();</code>

<code>      </code><code>case</code> <code>OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:</code>

<code>          </code><code>Toast.makeText(</code><code>this</code><code>, </code><code>"滑動中"</code><code>, Toast.LENGTH_LONG)</code>

<code>      </code><code>}</code>

 初始化:

<code>hourPicker=(NumberPicker) findViewById(R.id.hourpicker);</code>

<code>    </code><code>minutePicker=(NumberPicker) findViewById(R.id.minuteicker);</code>

<code>    </code><code>init();</code>

 init方法中,設定數字的最大值,最小值,以及滑動事件:

<code>private</code> <code>void</code> <code>init() {</code>

<code>     </code><code>hourPicker.setFormatter(</code><code>this</code><code>);</code>

<code>     </code><code>hourPicker.setOnValueChangedListener(</code><code>this</code><code>);</code>

<code>     </code><code>hourPicker.setOnScrollListener(</code><code>this</code><code>);</code>

<code>     </code><code>hourPicker.setMaxValue(</code><code>24</code><code>);</code>

<code>     </code><code>hourPicker.setMinValue(</code><code>0</code><code>);</code>

<code>     </code><code>hourPicker.setValue(</code><code>9</code><code>);</code>

<code>     </code> 

<code>     </code><code>minutePicker.setFormatter(</code><code>this</code><code>);</code>

<code>     </code><code>minutePicker.setOnValueChangedListener(</code><code>this</code><code>);</code>

<code>     </code><code>minutePicker.setOnScrollListener(</code><code>this</code><code>);</code>

<code>     </code><code>minutePicker.setMaxValue(</code><code>60</code><code>);</code>

<code>     </code><code>minutePicker.setMinValue(</code><code>0</code><code>);</code>

<code>     </code><code>minutePicker.setValue(</code><code>49</code><code>);</code>

<code> </code><code>}</code>

  還差一步,Activity需要繼承一下OnValueChangeListener,OnScrollListener,Formatter:

<code>public</code> <code>class</code> <code>MainActivity </code><code>extends</code> <code>Activity </code><code>implements</code> <code>OnValueChangeListener,OnScrollListener,Formatter{...}</code>

 最後說一點就是NumberPicker也是可以顯示文字的,重新定義一個NumberPicker,加載一下:

<code>valuepicker = (NumberPicker) findViewById(R.id.valuepicker);</code>

<code>        </code><code>String[] city = {</code><code>"立水橋"</code><code>,</code><code>"霍營"</code><code>,</code><code>"回龍觀"</code><code>,</code><code>"龍澤"</code><code>,</code><code>"西二旗"</code><code>,</code><code>"上地"</code><code>};</code>

<code>        </code><code>valuepicker.setDisplayedValues(city);</code>

<code>        </code><code>valuepicker.setMinValue(</code><code>0</code><code>);</code>

<code>        </code><code>valuepicker.setMaxValue(city.length - </code><code>1</code><code>);</code>

<code>        </code><code>valuepicker.setValue(</code><code>4</code><code>);</code>

  最後顯示的效果:

Android數字選擇器-NumberPicker

本文轉自Fly_Elephant部落格園部落格,原文連結:http://www.cnblogs.com/xiaofeixiang/p/4125560.html,如需轉載請自行聯系原作者

繼續閱讀