亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

[Android]NumberPickerCompat,對NumberPicker的簡單擴展,改善易用性

標簽:
Android
public class NumberPickerCompat extends NumberPicker implements NumberPicker.OnScrollListener,NumberPicker.OnValueChangeListener{

    private OnNumberPickerChangedListener mListener;
    private int selected;

    public NumberPickerCompat(Context context) {
        super(context);
        init();
    }

    public NumberPickerCompat(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public NumberPickerCompat(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    public NumberPickerCompat(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init();
    }

    private void init(){
        this.setOnScrollListener(this);
        this.setOnValueChangedListener(this);
    }

    public void setNumberPickerChangedListener(OnNumberPickerChangedListener listener){
        mListener = listener;
    }

    /**
     * 通过反射改变分割线颜色,
     */
    public void setPickerDividerColor(int color) {
        Field[] pickerFields = NumberPicker.class.getDeclaredFields();
        for (Field pf : pickerFields) {
            if (pf.getName().equals("mSelectionDivider")) {
                pf.setAccessible(true);
                try{
                    pf.set(this,new ColorDrawable(color));
                }catch (IllegalAccessException e) {
                    e.printStackTrace();
                }catch (Resources.NotFoundException e) {
                    e.printStackTrace();
                }catch (IllegalArgumentException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 过反射改变文字的颜色
     */
    public void setPickerTextColor(int color) {
        final int count = getChildCount();
        for(int i = 0; i < count; i++){
            View child = getChildAt(i);
            if(child instanceof EditText){
                try{
                    Field selectorWheelPaintField = getClass().getSuperclass().getDeclaredField("mSelectorWheelPaint");
                    selectorWheelPaintField.setAccessible(true);
                    ((Paint)selectorWheelPaintField.get(this)).setColor(color);
                    ((EditText)child).setTextColor(color);
                    invalidate();
                }
                catch(NoSuchFieldException e){
                    e.printStackTrace();
                }
                catch(IllegalAccessException e){
                    e.printStackTrace();
                }
                catch(IllegalArgumentException e){
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    public void onScrollStateChange(NumberPicker view, int scrollState) {
        switch (scrollState){
            case SCROLL_STATE_TOUCH_SCROLL:
                mListener.startScroll(this);
                break;
            case SCROLL_STATE_FLING:

                break;
            case SCROLL_STATE_IDLE:
                mListener.stopScroll(this,selected,getDisplayedValues() != null ? true : false);
                break;
        }
    }

    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        mListener.scrolling(this,newVal,getDisplayedValues() != null ? true : false);
        selected = newVal;
    }

    public interface OnNumberPickerChangedListener{

        public void startScroll(NumberPickerCompat picker);
        public void scrolling(NumberPickerCompat picker,int selected,boolean isPosition);
        public void stopScroll(NumberPickerCompat picker,int selected,boolean isPosition);

    }
}


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消