android签到日历实现

先看最终实现的效果
这里写图片描述

   事情是这样的,那一天我仍一如既往的在写代码(看新闻),隔了10米远我就看到一个傻。哦  不对 看见我们的经理走了过来。我的内心是这样的。

这里写图片描述

 “怎么样,BUG改的怎么样了?”
  呵呵,虽然我已经改完了,但是作为一个资深程序狗,我深知这句简单的话后面蕴藏的深意

这里写图片描述

机智的我如此答道:有几个BUG还是有问题,我再看看。

这里写图片描述

没事,我就随便问问,反正下周上线。我们要加一个签到的功能。

这里写图片描述

我:我们APP要签到功能干什么?  
PM:我看好多APP都有
我:。。。OK,签到不难,一般签到都是送积分送东西什么的,然后要有积分规则吧,积分得能换东西吧,是不是还的弄一个积分商城?
PM:对啊

这里写图片描述

生活就像QJ,既然不能反抗那就闭目享受吧。
爱哥的datepicker https://github.com/AigeStudio/DatePicker
爱哥 why you are so diao?下载下来运行 基本达到要求
但是有几个地方需要修改,
1.我们不需要滑动,爱哥的datepicker可以四个方向滑动 
2.why不能动态更新标志物 
3.预先设置选中的日期背景颜色和日历文字颜色有点不搭
来来来,按照一般的尿性 这时候我们需要分析源码了,看看源码,我真想说一句so easy。。so个毛线啊

这里写图片描述
大致分析一下,不需要完全看懂源码就可以改改。
这里写图片描述
首先分析如何“画”出一个日历,自定义view要稍微了解一点
1. 日历去掉上面 日 一 二 三 四 五 六 这一行,每个月都是5行7列
2. 画出网格,每个格子填上对应的日期
3. 自适应大小,每个格子的大小应该是根据自定义view中获取的width和height计算出来的
4. 滑动切换日期的原理
前面3个很多同学只要写过自定义view应该都不是太难的事情(算日期什么的太麻烦了),而且我这边要控制不能滑动所以着重看一下滑动切换的原理。
这里写图片描述
上面的代码画出来大概就是
这里写图片描述
滑动就是重写onTouchEvent,在MotionEvent.ACTION_MOVE中调用smoothScrollTo就实现了随手指切换日期,在切换成功后会重新invalidate。
回到我们那3个问题上来
1.在monthview中加入isScroll一个变量来控制一下就OK了,调用myDatepicker.setIsScroll(false); //是否允许滑动 false表示左右上下都不能滑动
2.经过调试,发现不能动态更新标志物主要是DPCManager那几个cache没有clear掉,新增dpcManager.clearnDATE_CACHE(); //清除cache后重新设置就好了
3.myDatepicker.setIsSelChangeColor(true, getResources().getColor(R.color.font_white_one)); //设置选择的日期字体颜色为白色,不然有的背景颜色和默认的字体颜色不搭,如果不设置的话就是下面这个效果
这里写图片描述

还加了一个滑动事件的判断,暂时没卵用
 monthView.setOnDateScrollChangeListener(new MonthView.OnDateScrollChangeListener() {
        @Override
        public void scrollLeft(int year, int month) {
            String str = "向左滑动=="+"年份="+year+"--月份=="+month;
            Toast.makeText(context,str,Toast.LENGTH_SHORT).show();
        }

        @Override
        public void scrollRight(int year, int month) {
            String str = "向右滑动=="+"年份="+year+"--月份=="+month;
            Toast.makeText(context,str,Toast.LENGTH_SHORT).show();
        }

        @Override
        public void scrollTop(int year, int month) {
            String str = "向上滑动=="+"年份="+year+"--月份=="+month;
            Toast.makeText(context,str,Toast.LENGTH_SHORT).show();
        }

        @Override
        public void scrollBottom(int year, int month) {
            String str = "向下滑动=="+"年份="+year+"--月份=="+month;
            Toast.makeText(context,str,Toast.LENGTH_SHORT).show();
        }
    });

修改过后的代码
下载地址:https://github.com/wushaoge/MySignDate

大家也可以根据自己的需求扩展,比如设置最小日期 最大日期  单独设置能否左右滑动,上下滑动,某些日期不能点击什么的 

这里写图片描述

  • 18
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值