登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

安卓选择器类库

[复制链接]
来自: sdsadsadasdasd 分类: Android精品源码 上传时间: 2017-1-6 14:27:05
Tag:

项目介绍:

安卓选择器类库,包括日期选择器、时间选择器、单项选择器、城市地址选择器、车牌号选择器、数字选择器、星座选择器、生肖选择器、颜色选择器、文件选择器、目录选择器等,可自定义顶部及底部界面,可自定义窗口动画…… 欢迎大伙儿在Issues提交你的意见或建议。
欢迎Fork & Pull requests贡献您的代码,大家共同学习【AndroidPicker交流群 604235437】。 查看更新日志,新版本可能未对旧版API作兼容处理,升级后若编译报错请根据错误提示更改。
Install
“app”是测试用例;“library”包括WheelPicker、ColorPicker、FilePicker, WheelPicker包括DatePicker、TimePicker、OptionPicker、LinkagePicker、AddressPicker、NumberPicker、CarNumberPicker等。
懒人建议直接远程加载jcenter里的
WheelPicker、FilePicker及ColorPicker是独立的,需要用哪个就compile哪个。 latest.release表示使用最新版,也可以参照此处指定具体的版本号
[XML] 查看源文件 复制代码
dependencies {
    compile 'cn.qqtheme.framework:WheelPicker:版本号'
    compile 'cn.qqtheme.framework:FilePicker:版本号'
    compile 'cn.qqtheme.framework:ColorPicker:版本号'
}

若jcenter仓库里的无法下载的话,可换JitPack的仓库试试:
第一步,在项目根目录下的build.gradle里加:
[XML] 查看源文件 复制代码
repositories {
    maven {
        url "https://www.jitpack.io"
    }
}
第二步,在项目的app模块下的build.gradle里加:
[XML] 查看源文件 复制代码
dependencies {
    compile 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:版本号'
    compile 'com.github.gzu-liyujiang.AndroidPicker:FilePicker:版本号'
    compile 'com.github.gzu-liyujiang.AndroidPicker:ColorPicker:版本号'
}
使用Eclipse的话如何集成?
直接下载AndroidPicker的jar包复制到你的项目的libs下即可。
ProGuard
由于地址选择器使用了fastjson来解析,混淆时候需要加入以下类似的规则,不混淆Province、City等实体类。
[Java] 查看源文件 复制代码
-keepattributes InnerClasses,Signature
-keepattributes *Annotation*

-keep class cn.qqtheme.framework.entity.** { *;}
Custom自定义视图
WheelView这个类是滑轮选择器的核心,可以扩展出各种效果,参见demo的NestActivity.java
[Java] 查看源文件 复制代码
WheelView wheelView = (WheelView) findViewById(R.id.wheelview);
wheelView.setTextColor(0xFFFF00FF);
WheelView.LineConfig config = new WheelView.LineConfig();
config.setColor(0xFFFF00FF);//线颜色
config.setAlpha(100);//线透明度
config.setRatio((float) (1.0 / 10.0));//线比率
config.setThick(ConvertUtils.toPx(this, 10));//线粗
wheelView.setLineConfig(config);
wheelView.setItems(new String[]{"贵州穿青人", "少数民族", "不在56个少数民族之列", "第57个民族"});
wheelView.setOnWheelListener(new WheelView.OnWheelListener() {
    @Override
    public void onSelected(boolean isUserScroll, int index, String item) {
        // do something
    }
});

自定义窗口进入退出动画
在xml里定义好动画,然后调用setAnimationStyle()即可,如:
[XML] 查看源文件 复制代码
    

[Java] 查看源文件 复制代码
picker.setAnimationStyle(R.style.Animation_Popup);

推荐使用ViewAnimator这个动画库来实现:
[XML] 查看源文件 复制代码
dependencies {
    compile 'com.github.florent37:viewanimator:1.0.3'
}

[Java] 查看源文件 复制代码
        ViewAnimator.animate(picker.getRootView())
                .slideBottomIn()
                .interpolator(new AccelerateInterpolator())
                .start();

自定义顶部及底部界面
添加自己的类,继承自现有的选择器,覆盖makeHeaderView、makeFooterView、onSubmit、onCancel,在确定选择时调用onSubmit, 取消选择时调用onCancel。详见示例:CustomHeaderAndFooterPicker.java
Sample (更多用法详见示例项目)
自定义选择器:
[Java] 查看源文件 复制代码
        CustomHeaderAndFooterPicker picker = new CustomHeaderAndFooterPicker(this);
        picker.setGravity(Gravity.CENTER);//居中
        picker.setOnOptionPickListener(new OptionPicker.OnOptionPickListener() {
            @Override
            public void onOptionPicked(int position, String option) {
                showToast(option);
            }
        });
        picker.show();

选择器内嵌到其他视图容器:
[Java] 查看源文件 复制代码
        final CarNumberPicker picker = new CarNumberPicker(this);
        picker.setOnWheelListener(new CarNumberPicker.OnWheelListener() {
            @Override
            public void onFirstWheeled(int index, String item) {
                textView.setText(item + ":" + picker.getSelectedSecondItem());
            }

            @Override
            public void onSecondWheeled(int index, String item) {
                textView.setText(picker.getSelectedFirstItem() + ":" + item);
            }
        });
        ViewGroup viewGroup = (ViewGroup) findViewById(R.id.wheelview_container);
        viewGroup.addView(picker.getContentView());

日期选择器:
[Java] 查看源文件 复制代码
        DatePicker picker = new DatePicker(this, DatePicker.YEAR_MONTH_DAY);
        picker.setRangeStart(2016, 8, 29);//开始范围
        picker.setRangeEnd(2022, 1, 1);//结束范围
        picker.setOnDatePickListener(new DatePicker.OnYearMonthDayPickListener() {
            @Override
            public void onDatePicked(String year, String month, String day) {
                showToast(year + "-" + month + "-" + day);
            }
        });
        picker.show();

时间选择器:
[Java] 查看源文件 复制代码
        TimePicker picker = new TimePicker(this, TimePicker.HOUR_12);
        picker.setRangeStart(9, 0);//09:00
        picker.setRangeEnd(12, 30);//12:30
        picker.setTopLineVisible(false);
        picker.setOnTimePickListener(new TimePicker.OnTimePickListener() {
            @Override
            public void onTimePicked(String hour, String minute) {
                showToast(hour + ":" + minute);
            }
        });
        picker.show();

单项选择器(可用于性别、学历、职业、生肖、星座等选择):
[Java] 查看源文件 复制代码
        OptionPicker picker = new OptionPicker(this, new String[]{
                "第一项", "第二项", "这是一个很长很长很长很长很长很长很长很长很长的很长很长的很长很长的项"
        });
        picker.setOffset(2);
        picker.setSelectedIndex(1);
        picker.setTextSize(11);
        picker.setLineConfig(new WheelView.LineConfig(0));//使用最长的线
        picker.setOnOptionPickListener(new OptionPicker.OnOptionPickListener() {
            @Override
            public void onOptionPicked(String option) {
                showToast(option);
            }
        });
        picker.show();

数字选择器(可用于身高、体重、年龄、温度等选择):
[Java] 查看源文件 复制代码
        NumberPicker picker = new NumberPicker(this);
        picker.setOffset(2);//偏移量
        picker.setRange(145, 200, 1);//数字范围
        picker.setSelectedItem(172);
        picker.setLabel("厘米");
        picker.setOnNumberPickListener(new NumberPicker.OnNumberPickListener() {
            @Override
            public void onNumberPicked(int index, Number item) {
                showToast("index=" + index + ", item=" + item.intValue());
            }
        });
        picker.show();

二三级联动选择器(详见示例项目,参见AddressPicker)
地址选择器(含省级、地级、县级):
[Java] 查看源文件 复制代码
        ArrayList data = new ArrayList();
        String json = AssetsUtils.readText(this, "city.json");
        data.addAll(JSON.parseArray(json, Province.class));
        AddressPicker picker = new AddressPicker(this, result);
        picker.setSelectedItem("贵州", "贵阳", "花溪");
        //picker.setHideProvince(true);//加上此句举将只显示地级及县级
        //picker.setHideCounty(true);//加上此句举将只显示省级及地级
        //picker.setColumnWeight(2/8.0, 3/8.0, 3/8.0);//省级、地级和县级的比例为2:3:3
        picker.setOnAddressPickListener(new AddressPicker.OnAddressPickListener() {
            @Override
            public void onAddressPicked(Province province, City city, County county) {
                showToast(province + city + county);
            }
        });
        picker.show();

星座选择器:
[Java] 查看源文件 复制代码
        boolean isChinese = Locale.getDefault().getDisplayLanguage().contains("中文");
        OptionPicker picker = new OptionPicker(this,
                isChinese ? new String[]{
                        "水瓶", "双鱼", "白羊", "金牛", "双子", "巨蟹",
                        "狮子", "处女", "天秤", "天蝎", "射手", "摩羯"
                } : new String[]{
                        "Aquarius", "Pisces", "Aries", "Taurus", "Gemini", "Cancer",
                        "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn"
                });
        picker.setLabel(isChinese ? "座" : "");
        picker.setTopBackgroundColor(0xFFEEEEEE);
        picker.setTopHeight(50);
        picker.setTopLineColor(0xFF33B5E5);
        picker.setTopLineHeight(1);
        picker.setTitleText(isChinese ? "请选择" : "Please pick");
        picker.setTitleTextColor(0xFF999999);
        picker.setTitleTextSize(24);
        picker.setCancelTextColor(0xFF33B5E5);
        picker.setCancelTextSize(22);
        picker.setSubmitTextColor(0xFF33B5E5);
        picker.setSubmitTextSize(22);
        picker.setTextColor(0xFFEE0000, 0xFF999999);
        WheelView.LineConfig config = new WheelView.LineConfig();
        config.setColor(0xFFEE0000);//线颜色
        config.setAlpha(140);//线透明度
        config.setRatio((float) (1.0 / 8.0));//线比率
        picker.setLineConfig(config);
        picker.setBackgroundColor(0xFFE1E1E1);
        //picker.setSelectedItem(isChinese ? "射手" : "Sagittarius");
        picker.setSelectedIndex(10);
        picker.setOnOptionPickListener(new OptionPicker.OnOptionPickListener() {
            @Override
            public void onOptionPicked(int index, String item) {
                showToast("index=" + index + ", item=" + item);
            }
        });
        picker.show();

颜色选择器:
[Java] 查看源文件 复制代码
        ColorPicker picker = new ColorPicker(this);
        picker.setInitColor(0xFFDD00DD);
        picker.setOnColorPickListener(new ColorPicker.OnColorPickListener() {
            @Override
            public void onColorPicked(int pickedColor) {
                showToast(ConvertUtils.toColorString(pickedColor));
            }
        });
        picker.show();

文件选择器(需要权限android.permission.READ_EXTERNAL_STORAGE):
[Java] 查看源文件 复制代码
        FilePicker picker = new FilePicker(this, FilePicker.FILE);
        picker.setShowHideDir(false);
        picker.setRootPath(StorageUtils.getExternalRootPath() + "Download/");
        //picker.setAllowExtensions(new String[]{".apk"});
        picker.setOnFilePickListener(new FilePicker.OnFilePickListener() {
            @Override
            public void onFilePicked(String currentPath) {
                showToast(currentPath);
            }
        });
        picker.show();

目录选择器(需要权限android.permission.READ_EXTERNAL_STORAGE):
[Java] 查看源文件 复制代码
        FilePicker picker = new FilePicker(this, FilePicker.DIRECTORY);
        picker.setOnFilePickListener(new FilePicker.OnFilePickListener() {
            @Override
            public void onFilePicked(String currentPath) {
                showToast(currentPath);
            }
        });
        picker.show();

Screenshots









相关源码推荐:

我来说两句
*滑动验证:
所有评论(119)
gongags 2017-1-6 14:36:12
支持,感谢,祝巴士越来越好~
回复
subsoil 2017-1-6 14:46:12
膜拜大神~
回复
tintins 2017-1-6 14:51:35
mark,收藏了
回复
Mr_Zhao 2017-1-6 15:05:46
mark,收藏了
回复
ricktians 2017-1-6 15:27:27
学习...学习...
回复
转角依然笑~ 2017-1-6 15:52:22
׿ʿ好的内容真的很多~赞
回复
YUxp 2017-1-6 22:02:15
虽不明,但觉厉!
回复
提取码:  下载次数:64 状态:已购或VIP 售价:10(原价:10)金钱 下载权限:限制会员 
1835 1 64
代码贡献英雄榜
用户名 下载数
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,769657487

如何获得代码达人称号

如何成为签约作者

联系我们
关闭
合作电话:
13802416937
Email:
[email protected]
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表