日历控件开发详解0

简介: 从今天开始,我们将一步步学习如何实现一个Android的日历控件,今天是第一天! 一、准备工作之配置参数 制作一个日历控件,我们首先要配置一些参数 1.尺寸 dimension.xml 10dp 48dp 10dp ...

从今天开始,我们将一步步学习如何实现一个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类,接下来,就是具体绘制每种日历元素了。

目录
相关文章
|
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