在前一篇日志中我们已经做好了日历控件的准备工作,今天我们将继续完成这个日历控件。
三、日历元素之Border
在Border类中,我们主要完成日历边框的绘制
- package com.xys.mycalender.element;
-
- import android.app.Activity;
- import android.graphics.Canvas;
- import android.view.View;
-
- import com.xys.mycalender.R;
- import com.xys.mycalender.base.CalendarBase;
- /*
- * 绘制日历边框
- */
- public class Border extends CalendarBase {
-
- //日历边框的位置大小
- float left;
- float right;
- float top;
- float bottom;
-
- public Border(Activity activity, View view) {
- super(activity, view);
- // 获取日历边框的颜色
- paint.setColor(activity.getResources().getColor(R.color.border_color));
- }
-
- @Override
- public void onDraw(Canvas canvas) {
- left=boderMargin;
- right=view.getMeasuredWidth()-boderMargin;
- top=boderMargin;
- bottom=view.getMeasuredHeight()-boderMargin;
-
- // 绘制日历边框
- canvas.drawLine(left, top, right, top, paint);
- canvas.drawLine(left, top, left, bottom, paint);
- canvas.drawLine(left, bottom, right, bottom, paint);
- canvas.drawLine(right, top, right, bottom, paint);
- }
-
-
- }
四、日历元素之Week名称
在Week类中我们主要完成一周名称的绘制
- package com.xys.mycalender.element;
-
- import android.app.Activity;
- import android.graphics.Canvas;
- import android.view.View;
-
- import com.xys.mycalender.R;
- import com.xys.mycalender.base.CalendarBase;
- /*
- * 绘制一周的名称
- */
- public class Week extends CalendarBase {
- //参数
- private float left;
- private float top;
- private float eachWeekWidth;
- private float eachWeekHeight;
-
- //一周的名称
- private String[] weeknames;
- //一周名称的颜色1-5
- private int weekdayColor;
-
- public Week(Activity activity, View view) {
- super(activity, view);
- //获取一周名称颜色1-5
- weekdayColor=activity.getResources().getColor(R.color.weekname_color);
- //获取一周名称
- weeknames=activity.getResources().getStringArray(R.array.week_name);
- //设置一周名称大小
- paint.setTextSize(weekNameSize);
- paint.setFakeBoldText(true);
- }
-
- @Override
- public void onDraw(Canvas canvas) {
- // TODO Auto-generated method stub
- left=boderMargin;
- top=boderMargin;
- eachWeekWidth=(view.getMeasuredWidth()-boderMargin*2)/7;
- eachWeekHeight=eachWeekWidth;
- for (int i = 0; i < weeknames.length; i++) {
- //周六日
- if (i==0||i==weeknames.length-1) {
- paint.setColor(weekendColor);
- }else {
- //平日
- paint.setColor(weekdayColor);
- }
- //文字绘制在每一格的中间 measureText返回文字的长度
- left=boderMargin+eachWeekWidth*i+(eachWeekWidth-paint.measureText(weeknames[i]))/2;
- top=boderMargin+weekNameMargin+paint.getTextSize();
- //开始绘制
- canvas.drawText(weeknames[i], left, top, paint);
- }
- }
-
- }
绘制一周名称的关键在于要将文字绘制在格子的中间,这点的实现见程序倒数2、3行。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。