资讯专栏INFORMATION COLUMN

NumberPicker实现滑动选择

zhaot / 640人阅读

摘要:使用实现滑动选择可实现省市联动最近使用了一个控件该控件可以实现省市区联动以及其他各种滑动选择,这里只是简单的记录下如何使用。

NumberPicker使用,实现滑动选择(可实现省市联动)

最近使用了一个控件NumberPicker,该控件可以实现省市区联动以及其他各种滑动选择,这里只是简单的记录下如何使用。
效果图:

先是xml文件:



   

接下来是Activity的代码:

public class MainActivity extends AppCompatActivity implements NumberPicker.Formatter{

    private NumberPicker mNumberPicker;
    private String[] mCities  = {"北京","上海","广州","深圳","杭州","青岛","西安"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(R.style.AppTheme);
        setContentView(R.layout.activity_main);
        mNumberPicker = (NumberPicker)findViewById(R.id.number_picker);
        mNumberPicker.setDisplayedValues(mCities);//设置需要显示的数组
        mNumberPicker.setMinValue(0);
        mNumberPicker.setMaxValue(mCities.length - 1);//这两行不能缺少,不然只能显示第一个,关联到format方法
        setPickerDividerColor();

        setNumberPickerTextColor(mNumberPicker,Color.RED);
    }

    //这个方法是根据index 格式化先生的文字,需要先 implements NumberPicker.Formatter
    @Override
    public String format(int value) {
        return mCities[value];
    }

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

    /**
     * 过反射改变文字的颜色
     * @param numberPicker
     * @param color
     * @return
     */
    public static boolean setNumberPickerTextColor(NumberPicker numberPicker, int color)
    {
        final int count = numberPicker.getChildCount();
        for(int i = 0; i < count; i++){
            View child = numberPicker.getChildAt(i);
            if(child instanceof EditText){
                try{
                    Field selectorWheelPaintField = numberPicker.getClass()
                            .getDeclaredField("mSelectorWheelPaint");
                    selectorWheelPaintField.setAccessible(true);
                    ((Paint)selectorWheelPaintField.get(numberPicker)).setColor(color);
                    ((EditText)child).setTextColor(color);
                    numberPicker.invalidate();
                    return true;
                }
                catch(NoSuchFieldException e){
                    Log.w("setTextColor", e);
                }
                catch(IllegalAccessException e){
                    Log.w("setTextColor", e);
                }
                catch(IllegalArgumentException e){
                    Log.w("setTextColor", e);
                }
            }
        }
        return false;
    }
}

以上就是NumberPicker的简单使用了,可以用它实现省市区联动(3个NumberPicker),也可以实现充值打折金额滑动选择(比如充100(实付:90))等等.通过反射改变分割线的方法是在stackoverflow上看到的:
改变分割线颜色:http://stackoverflow.com/ques...
改变文字颜色:http://stackoverflow.com/ques...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66668.html

相关文章

  • 如何造一个移动端的联动选择器(二)

    摘要:写在前面之前写了一篇为移动端而生的自定义多级联动选择器,得到了很多人的关注。预知后话地址为移动端而生的自定义多级联动选择器到此,的操作和手势算法就已经基本掌握了。 写在前面 之前写了一篇 MultiPicker -『为移动端而生』的自定义多级联动选择器,得到了很多人的关注。鉴于很多人对这种手写插件的过程很好奇,所以写了几篇文章,来说说它的成长史~ 在阅读本文之前,确保你有稍微看过 Mu...

    leeon 评论0 收藏0
  • 如何造一个移动端的联动选择器(二)

    摘要:写在前面之前写了一篇为移动端而生的自定义多级联动选择器,得到了很多人的关注。预知后话地址为移动端而生的自定义多级联动选择器到此,的操作和手势算法就已经基本掌握了。 写在前面 之前写了一篇 MultiPicker -『为移动端而生』的自定义多级联动选择器,得到了很多人的关注。鉴于很多人对这种手写插件的过程很好奇,所以写了几篇文章,来说说它的成长史~ 在阅读本文之前,确保你有稍微看过 Mu...

    ivyzhang 评论0 收藏0
  • 如何造一个移动端的联动选择器(二)

    摘要:写在前面之前写了一篇为移动端而生的自定义多级联动选择器,得到了很多人的关注。预知后话地址为移动端而生的自定义多级联动选择器到此,的操作和手势算法就已经基本掌握了。 写在前面 之前写了一篇 MultiPicker -『为移动端而生』的自定义多级联动选择器,得到了很多人的关注。鉴于很多人对这种手写插件的过程很好奇,所以写了几篇文章,来说说它的成长史~ 在阅读本文之前,确保你有稍微看过 Mu...

    wslongchen 评论0 收藏0

发表评论

0条评论

zhaot

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<