Android开发实现自定义日历、日期选择控件效果

本文记录了如何实现一个自定义的日历控件,包括使用自定义组合控件作为头部,GridView展示一周日期,自定义PopupWindow处理月切换,通过GestureDetector监听滑动。核心逻辑依赖Calendar类,并提供了获取阴历日期的功能。控件实现包含日期实体类、日期工具类以及GridView的选中和滑动处理。这是一个考验基本功的项目,旨在帮助开发者自定义符合设计需求的日历控件。
摘要由CSDN通过智能技术生成

最近项目需要日历效果,考虑用第三方的反而不太适合设计需求,修改复杂,与其这样不入自己重新写一个干净的控件。虽不是什么牛逼控件,但是也需要我们能按照设计自己写出来。在此记录一下实现思路。


效果图:

实现思路
  • 头部是一个自定义组合控件;

  • 显示一周的日期部分用GridView 更加方便更新;

  • 切换月的部分是一个自定义PopupWindow;

  • GridView选中效果;

  • GridView根据手势GestureDetector监听左右滑动;

  • 核心其实还是Calendar类,根据这个类我们可以获取制定日期一周的日期集合、可以获取制定日期一月的日期集合等等;

  • 根据阳历日期获取阴历日期

使用
// xml布局引用<com.wzh.calendar.view.DataView
        android:id="@+id/week"
        android:layout_width="match_parent"
        android:background="@color/color_ffffff"
        android:layout_height="wrap_content">
</com.wzh.calendar.view.DataView>

// 代码中,自定义回调监听选中的日期 dataView = (DataView) findViewById(R.id.week); dataView.setOnSelectListener(new DataView.OnSelectListener() {            @Override            public void onSelected(DateEntity date) {                info.setText("日期:"+ date.date+"\n"+                             "周几:"+ date.weekName+"\n"+                             "今日:"+ date.isToday+"\n"+                             "时间戳:"+ date.million+"\n");                Log.e("wenzhiao--------------",date.toString());            } }); //需要传递此种格式的日期,不传默认是获取今日的日期 dataView.getData("2017-04-19");
实现整体逻辑

回调的日期信息封装成一个实体类DateEntity:

public class DateEntity {    
   public long million ; //时间戳    public String weekName ;  //周几    public int weekNum ;  //一周中第几天,非中式    public String date ; //日期    public boolean isToday ;  //是否今天    public String  day ;  //天    public String luna ;  //阴历    @Override    public String toString() {
       return "DateEntity{" +                
               "million=" + million +                
               ", weekName='" + weekName + '\'' +                
               ", weekNum=" + weekNum +                
               ", date='" + date + '\'' +                
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值