日历控件开发详解0

从今天开始,我们将一步步学习如何实现一个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

日历控件开发详解0的相关文章

日历控件开发详解1

在前一篇日志中我们已经做好了日历控件的准备工作,今天我们将继续完成这个日历控件. 三.日历元素之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.myca

sqlserver2005的KPI展示控件开发详解

注意:这篇文章其实在几天前我已经写过,但是那是我的第一片文章,写的相当粗糙,很多东西都没有写详细,只是草草的提供了源码的下载,看到我的那篇<数据挖掘控件研究>点击量有点大,给了我不少安慰,因此决定重写KPI展示这片文章.没有深入了解过的朋友请继续往下看. 关于sqlserver2005中的KPI特性,相信接触过sqlserver2005的BI的平台的朋友都有所耳闻.并且跟数据挖掘查看器一样,微软只在sqlserver2005客户端里面提供了展示界面,并没有把展示的编程接口提供给我们.所以这些工

Android自定义日历控件实例详解_Android

为什么要自定义控件 有时,原生控件不能满足我们对于外观和功能的需求,这时候可以自定义控件来定制外观或功能:有时,原生控件可以通过复杂的编码实现想要的功能,这时候可以自定义控件来提高代码的可复用性. 如何自定义控件 下面我通过我在github上开源的Android-CalendarView项目为例,来介绍一下自定义控件的方法.该项目中自定义的控件类名是CalendarView.这个自定义控件覆盖了一些自定义控件时常需要重写的一些方法. 构造函数 为了支持本控件既能使用xml布局文件声明,也可在ja

Android自定义日历控件实例详解

为什么要自定义控件 有时,原生控件不能满足我们对于外观和功能的需求,这时候可以自定义控件来定制外观或功能:有时,原生控件可以通过复杂的编码实现想要的功能,这时候可以自定义控件来提高代码的可复用性. 如何自定义控件 下面我通过我在github上开源的Android-CalendarView项目为例,来介绍一下自定义控件的方法.该项目中自定义的控件类名是CalendarView.这个自定义控件覆盖了一些自定义控件时常需要重写的一些方法. 构造函数 为了支持本控件既能使用xml布局文件声明,也可在ja

Android仿京东淘宝自动无限循环轮播控件思路详解

在App的开发中,很多的时候都需要实现类似京东淘宝一样的自动无限轮播的广告栏,所以就自己写了一个,下面是我自定义控件的思路和过程. 一.自定义控件属性 新建自定义控件SliderLayout继承于RelativeLayout,首先要考虑的就是自定义的控件需要扩展那些属性,把这些属性列出来.在这里是要实现类似于京东淘宝的无限轮播广告栏,那么首先想到的就是轮播的时长.轮播指示器的样式等等.我在这里列举了一些并且结合到了代码中. 1.扩展属性 (1)是否开启自动轮播的功能. (2)指示器的图形样式,一

android之SeekBar控件用法详解_Android

MainActivity.java package com.example.mars_2400_seekbar; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.app.Activity; import android.os.Bundle; import a

android之RatingBar控件用法详解_Android

MainActivity.java package com.example.mars_2500_ratingbar; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.app.Activity; import android.os.Bundle; import

WebBrowser控件使用详解

原文:WebBrowser控件使用详解 方法 说明 GoBack 相当于IE的"后退"按钮,使你在当前历史列表中后退一项 GoForward 相当于IE的"前进"按钮,使你在当前历史列表中前进一项 GoHome 相当于IE的"主页"按钮,连接用户默认的主页 GoSearch 相当于IE的"搜索"按钮,连接用户默认的搜索页面 Navigate 连接到指定的URL Refresh 刷新当前页面 Refresh2 同上,只是可以指定

Android 仿淘宝、京东商品详情页向上拖动查看图文详情控件DEMO详解_Android

一.淘宝商品详情页效果 我们的效果 二.实现思路      使用两个scrollView,两个scrollView 竖直排列,通过自定义viewGroup来控制两个scrollView的竖直排列,以及滑动事件的处理.如下图 三.具体实现 1.继承viewGroup自定义布局View 重写onMeasure()和onLayout方法,在onLayout方法中完成对两个子ScrollView的竖直排列布局,代码如下: 布局文件: <RelativeLayout xmlns:android="h