Android 类似于仿日历选择 区间变色

简介: Android 类似于仿日历选择 区间变色

最近一个朋友问到我一个小需求,类似于一个日历布局的页面,需要根据服务端传递过来的起始与结束日期将起始与结束日期变颜色,区间也变换颜色,就写的一个小demo,刚好分享一下:最下面有提供demo, 设置的0积分,后面平台可能会变动, 有需要的评论区留言邮箱,我发邮箱

不说了,还是先上效果图:

1_qq1271396448.jpg20200508175226153.jpg

整个布局使用的是一个网格布局.

主要分为4个部分,

1: 白色区域

2:开始点

3:结束点

4:中间部分

其实开始和结束部分目前颜色是相同的.但是为了防止需求改动,就分开了

封装一个实体类,里面存了每个条目的标识与文本

private int flag;
    private String text;
    public RangeBean(int flag,String text){
        this.flag = flag;
        this.text = text;
    }
    public int getFlag() {
        return flag;
    }
    public void setFlag(int flag) {
        this.flag = flag;
    }
    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }

image.gif

写一个全局的常量参数,来作为固定的标识,直接写,防止错乱,记不住

//外面
    public final static int BOX_OUT = 1;
    //开始
    public final static int BOX_START = 2;
    //结束
    public final static int BOX_END = 3;
    //里面
    public final static int BOX_IN = 4;

image.gif

在适配器中封装一个方法,来根据不同标识返回不同的颜色,在适配器的onBindViewHolder中给条目布局设置背景颜色

private int getBoxBgColor(int flag) {
        int boxBgColor = R.color.box_out;
        //根据不同的标识符来返回颜色
        switch (flag) {
            case RangeBean.BOX_OUT:
                boxBgColor = R.color.box_out;
                break;
            case RangeBean.BOX_START:
                boxBgColor = R.color.box_start_end;
                break;
            case RangeBean.BOX_END:
                boxBgColor = R.color.box_start_end;
                break;
            case RangeBean.BOX_IN:
                boxBgColor = R.color.box_in;
                break;
        }
        return boxBgColor;
    }
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.tvNum.setText(rangeBeanList.get(position).getText());
        holder.tvNum.setBackgroundColor(context.getResources().getColor(getBoxBgColor(rangeBeanList.get(position).getFlag())));
    }

image.gif

数据默认全部为没选择,北京全部为白色

/**
     * 初始化数据
     */
    private void initData() {
        //默认全部白色背景
        for (int i = 0; i < 30; i++) {
            rangeList.add(new RangeBean(RangeBean.BOX_OUT, (i + 1) + ""));
        }
        rangeAdapter.notifyDataSetChanged();
    }

image.gif

在点击时,给每个指定的条目变换指定的颜色,详情看注释

/**
     * 绘制view
     */
    private void renderView(int startDate, int endDate) {
        //先全部置为白色
        for (int i = 0; i < rangeList.size(); i++) {
            rangeList.get(i).setFlag(RangeBean.BOX_OUT);
        }
        rangeAdapter.notifyDataSetChanged();
        //开始绘制当前的点(因为数组下标是从0开始的,所以当前输入的值减1),算作是开始和结束的点
        rangeList.get(startDate - 1).setFlag(RangeBean.BOX_START);
        rangeList.get(endDate - 1).setFlag(RangeBean.BOX_END);
        //从输入的值的位置(输入值的位置比下标往后一位),也就是说下标的后一位,算作是区间里面,到结束点下标的前一个
        for (int i = startDate; i < endDate - 1; i++) {
            rangeList.get(i).setFlag(RangeBean.BOX_IN);
        }
        //这个区间刷新
        rangeAdapter.notifyItemRangeChanged(startDate - 1, endDate - startDate + 1);
    }

image.gif

下载地址: Android 仿日历区间选择变色

相关文章
|
移动开发 前端开发 Android开发
前端html input =“file“ ios/安卓解决无法选择图库/拍照问题
前端html input =“file“ ios/安卓解决无法选择图库/拍照问题
2248 0
|
6月前
|
Java API 开发工具
一个专为Android平台设计的高度可定制的日历库
Calendar库是Android开发的工具,支持RecyclerView和Compose,提供高度定制的日历组件。功能包括:单选/多选/范围日期选择、周/月模式、禁用特定日期、设置边界、自定义视图、每周起始日、滚动方式、热力图、标题和脚注、滑动导航及兼容低版本API。示例应用和源码可在GitHub找到,通过Gradle集成,有详细文档指导。
103 16
|
数据库 Android开发
Android选择本地视频和照片上传到服务器
照片photo: 将http//本地存放照片数据库电脑ip:端口号/fileaddress.png转image (一)后台发送来的数据转换Bitmap的方法: 用法: (二)将第一针显示出来方法: 用法: 视频vedio: 使用选择器获取的 content文件转file文件方法
269 0
Android选择本地视频和照片上传到服务器
|
Android开发
Android官方下拉选择控件Spinner
Android官方下拉选择控件Spinner
410 0
Android官方下拉选择控件Spinner
|
前端开发 Android开发
关于安卓自定义时间选择控件的实现(二)
安卓自定义时间选择控件(二)
271 0
关于安卓自定义时间选择控件的实现(二)
|
Android开发
关于安卓自定义时间选择控件的实现(一)
安卓自定义时间选择控件(一)
254 0
关于安卓自定义时间选择控件的实现(一)
|
XML Android开发 数据格式
关于安卓自定义地址选择控件的实现
安卓自定义地址选择控件
171 0
关于安卓自定义地址选择控件的实现
|
API Android开发
关于Android 日历事件的实现
经常购买火车票,机票的同学就知道,当我们买下一张票的时候,票的行程日期会被写入系统日历中,当火车开动或者飞机启航的前30分钟,手机会有提醒信息,这条信息是由系统日历发出的,提醒用户,别错过时间啦。 像这种系统日历提醒功能,实现起来并不难,毕竟Android 系统已经提供API给我们调用了,不需要重新造轮子,下面我们来实现这个功能。
396 0
|
JavaScript Java Android开发
Android修行手册之Kotlin-【Null检查】、【类型检查】、【区间】篇
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
260 0
|
测试技术 API Android开发
【Android 高性能音频】OboeTester 音频性能测试应用 ( Oboe 输出测试参数 | API 选择 | 音频输出设备选择 | 采样率 | 通道 | 采样格式 | 播放偏好 )(二)
【Android 高性能音频】OboeTester 音频性能测试应用 ( Oboe 输出测试参数 | API 选择 | 音频输出设备选择 | 采样率 | 通道 | 采样格式 | 播放偏好 )(二)
305 0
【Android 高性能音频】OboeTester 音频性能测试应用 ( Oboe 输出测试参数 | API 选择 | 音频输出设备选择 | 采样率 | 通道 | 采样格式 | 播放偏好 )(二)