从今天开始,我们将一步步学习如何实现一个Android的日历控件,今天是第一天!
一、准备工作之配置参数
制作一个日历控件,我们首先要配置一些参数
1.尺寸
dimension.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- 日历边框间距 --> <dimen name="margin">10dp</dimen> <dimen name="logo_size">48dp</dimen> <!-- 日历边框 --> <dimen name="border_margin">10dp</dimen> <!-- 日历周名 --> <dimen name="weekname_size">18dp</dimen> <!-- 日历周名之间间距 --> <dimen name="weekname_margin">5dp</dimen> <!-- 日期 --> <dimen name="day_size">15dp</dimen> <dimen name="day_top_offset">11dp</dimen> <dimen name="current_day_size">15dp</dimen> </resources>
2.颜色
colors.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="calendar_background">#000000</color> <color name="recordremind_background">#FFFFFF</color> <color name="border_color">#FFFFFF</color> <color name="weekname_color">#FFFFFF</color> <color name="day_color">#FFFFFF</color> <color name="inner_grid_color">#FFFFFF</color> <color name="prev_next_month_day_color">#999999</color> <color name="text_color">#FFFF00</color> <color name="recordremindtext_color">#000000</color> <color name="current_day_color">#FF0000</color> <color name="today_background_color">#FF0000</color> <color name="today_color">#FFFFFF</color> <color name="weekendColor">#FF0000</color> <color name="sunday_saturday_prev_next_month_day_color">#990000</color> </resources>
二、准备工作之架构设计
1.一个日历控件的绘制可以分解为几个部分,如边框的绘制,周名称的绘制,中间Grid的绘制等。
因此,每种日历的元素都需要能实现onDraw方法,所以我们新建一个interface
package com.xys.mycalender.interfaces; import android.graphics.Canvas; /* * 提供日历元素绘制图形的方法onDraw,使每一个实现该接口的日历元素类都有一个draw方法 */ public interface CalendarElement { public void onDraw(Canvas canvas); }
2.然后,我们新建一个Base类去实现这个接口,同时在Base类中去获取这些公共参数的值。
package com.xys.mycalender.base; import android.app.Activity; import android.graphics.Canvas; import android.graphics.Paint; import android.view.View; import com.xys.mycalender.R; import com.xys.mycalender.interfaces.CalendarElement; /* * 从资源文件中获取该项目的一些公共数据,并使其子类实现onDraw方法 */ public class CalendarBase implements CalendarElement{ protected Activity activity; protected View view; //画笔 protected Paint paint=new Paint(); //边距 protected float boderMargin; //周名称边距 protected float weekNameMargin; //周名称大小 protected float weekNameSize; //周末名称颜色 protected int weekendColor; public CalendarBase(Activity activity,View view){ this.activity=activity; this.view=view; //从资源文件中获取公共数据 boderMargin=activity.getResources().getDimension(R.dimen.border_margin); weekNameMargin=activity.getResources().getDimension(R.dimen.weekname_margin); weekNameSize=activity.getResources().getDimension(R.dimen.weekname_size); weekendColor=activity.getResources().getColor(R.color.weekendColor); } public void onDraw(Canvas canvas) { // TODO Auto-generated method stub } }
到此为止,我们的准备工作就结束了,此时,我们已经配置好了参数,并为每种日历元素实现了Base类,接下来,就是具体绘制每种日历元素了。
时间: 2024-09-24 21:32:50