最近项目需要日历效果,考虑用第三方的反而不太适合设计需求,修改复杂,与其这样不入自己重新写一个干净的控件。虽不是什么牛逼控件,但是也需要我们能按照设计自己写出来。在此记录一下实现思路。
效果图:
实现思路
头部是一个自定义组合控件;
显示一周的日期部分用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 + '\'' +