日历控件开发详解1

简介: 在前一篇日志中我们已经做好了日历控件的准备工作,今天我们将继续完成这个日历控件。 三、日历元素之Border 在Border类中,我们主要完成日历边框的绘制 package com.xys.

在前一篇日志中我们已经做好了日历控件的准备工作,今天我们将继续完成这个日历控件。

三、日历元素之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行。
目录
相关文章
|
5月前
|
C# UED 开发者
WPF动画大揭秘:掌握动画技巧,让你的界面动起来,告别枯燥与乏味!
【8月更文挑战第31天】在WPF应用开发中,动画能显著提升用户体验,使其更加生动有趣。本文将介绍WPF动画的基础知识和实现方法,包括平移、缩放、旋转等常见类型,并通过示例代码展示如何使用`DoubleAnimation`创建平移动画。此外,还将介绍动画触发器的使用,帮助开发者更好地控制动画效果,提升应用的吸引力。
305 0
|
安全 iOS开发 UED
iOS开发一款小巧简洁的日历控件
iOS开发一款小巧简洁的日历控件
358 0
|
C#
silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发) 有个问题想请教下大家,我仿了腾讯的SL版QQ,相似度95%以上。我想写成教程教大家怎么开发出来,会不会有版权什么问题的。
1162 0
|
Android开发 iOS开发
带农历日历的DatePicker控件!Xamarin控件开发小记
原文:带农历日历的DatePicker控件!Xamarin控件开发小记 闲来无事开发了个日期选择控件,感兴趣的同学前往: https://github.com/MatoApps/Mato.DatePicker Mato.
1753 0
|
前端开发 API Android开发
微信小程序把玩(二十)slider组件
原文:微信小程序把玩(二十)slider组件 slider滑动组件用的不太多,在其他平台反正我是用的不多 主要属性: wxml js Page({ data:{ // text:"这是一个页面" },...
1295 0