日历控件开发详解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.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行。

时间: 2024-10-24 18:42:06

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

日历控件开发详解0

从今天开始,我们将一步步学习如何实现一个Android的日历控件,今天是第一天! 一.准备工作之配置参数 制作一个日历控件,我们首先要配置一些参数 1.尺寸 dimension.xml <?xml version="1.0" encoding="utf-8"?> <resources> <!-- 日历边框间距 --> <dimen name="margin">10dp</dimen> &

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