当前位置:   article > 正文

java 日历签到功能_自定义Calendar实现签到功能

java实现日历签到功能

前言

这篇文章没有什么可看性,主要是源码注释太多,推荐自己看源码,更容易理解些,在这里主要介绍,其运作流程,贴代码片段。

自定义View要重写三个方法:onMeasure,onLayout,onDraw,这三个方法各有个的作用,onMeasure是对组件的宽高进行测量,onLayout是对子控件的位置进行摆放,onDraw是对自定义控件进行绘制,已经对onMeasure,onLayout方法进行了运用,那个源码注释也很多,如果有兴趣的可以去看看,本章是对onDraw方法进行使用,顺带使用Path对象。

好了,先谈谈为什么我要重复造轮子,要做一个有签到功能的日历,由于自己对自定义的组件ondraw方法还没怎么用过,所以重复造轮子咯,是不是理由不是很充分,没关系,开心就好。

先来张效果图

243728_0.gif

这个CalendarView的API

String clickLeftMonth(); //上一个月 return String(年-月)

String clickRightMonth(); //下一个月 return String(年-月)

Surface getSurface(); //获取整个组件画图对象,可进行设置字体颜色等 return Surface

String getYearAndmonth(); // 获得当前应该显示的年月 return String(年-月)

boolean isSelectMore(); //返回是否多选

setSelectMore(boolean flag);//设置是否多选

setFlagData(String[] flags);//设置要进行标记的数据

setOnItemClickListener(OnItemClickListener); //点击一个日期的回调事件

setWritingFlag(String str); //设置标记字符,默认为签到

OK,先来简述下这个组件跑起来的流程,

1.初始化数据。

2.测量组件大小,即调用了OnMeasure方法

3.调用onDraw方法。

步骤是不是很简单呀?OK,通过源码简单的跑一下流程。

初始化数据

public CalendarView(Context context) {

super(context);

// 初始化数据

init();

}

public CalendarView(Context context, AttributeSet attrs) {

super(context, attrs);

// 初始化数据

init();

}

/**

* 初始化数据 ,初始化事件对象 ,初始化日期格式类对象 ,Surface布局对象初始化 ,获取屏幕密度比例 ,设置View背景 ,设置触摸事件

*/

private void init() {

// 创建一个Date对象并将引用给显示的月,选择开始,选择结束,今天的日期

curDate = selectedStartDate = selectedEndDate = today = new Date();

// 获取一个日期类对象

calendar = Calendar.getInstance();

// 设置日期

calendar.setTime(curDate);

// 创建一个布局路径

surface = new Surface(this);

// 获取屏幕密度比例

surface.density = getResources().getDisplayMetrics().density;

// 给整个控件设置触摸事件

setOnTouchListener(this);

}

这一块看出,在组件进行实例化的时候调用了init方法,然后看见了new Surface() 创建了一个Surface对象。ok来看下这个Surface类,其他的应该都知道是什么。(像我注释这么密的看不懂才

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/930159
推荐阅读
相关标签
  

闽ICP备14008679号