package net.blogjava.mobile;
import java.sql.Date;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.graphics.BitmapFactory.Options;
import android.graphics.drawable.BitmapDrawable;
import android.text.style.StyleSpan;
import android.view.View;
public class Grid extends CalendarParent
{
private String[] days = new String[42];
private int dayColor;
private int innerGridColor;
private int prevNextMonthDayColor;
private int currentDayColor;
private float daySize;
private float dayTopOffset;
private float currentDaySize;
private float cellX = -1, cellY = -1;
private float oldCellX = -1, oldCellY = -1;
public void setCellX(float cellX)
{
oldCellX = this.cellX;
this.cellX = cellX;
}
public void setCellY(float cellY)
{
oldCellY = this.cellY;
this.cellY = cellY;
}
private int getMonthDays(int year, int month)
{
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
{
return 31;
}
case 4:
case 6:
case 9:
case 11:
{
return 30;
}
case 2:
{
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
return 29;
else
return 28;
}
}
return 0;
}
public Grid(Activity activity, View view)
{
super(activity, view);
dayColor = activity.getResources().getColor(R.color.day_color);
innerGridColor = activity.getResources().getColor(
R.color.inner_grid_color);
prevNextMonthDayColor = activity.getResources().getColor(
R.color.prev_next_month_day_color);
currentDayColor = activity.getResources().getColor(
R.color.current_day_color);
daySize = activity.getResources().getDimension(R.dimen.day_size);
dayTopOffset = activity.getResources().getDimension(
R.dimen.day_top_offset);
currentDaySize = activity.getResources().getDimension(
R.dimen.current_day_size);
paint.setColor(activity.getResources().getColor(R.color.border_color));
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.set(calendar.get(calendar.YEAR), calendar.get(calendar.MONTH),
1);
int week = calendar.get(calendar.DAY_OF_WEEK);
int currentMonth = calendar.get(calendar.MONTH);
int monthDays = 0;
int prevMonthDays = 0;
int nextMonthDays = 0;
monthDays = getMonthDays(calendar.get(calendar.YEAR), currentMonth);
if (currentMonth == 0)
prevMonthDays = getMonthDays(calendar.get(calendar.YEAR) - 1, 11);
else
prevMonthDays = getMonthDays(calendar.get(calendar.YEAR),
currentMonth - 1);
if (currentMonth == 11)
nextMonthDays = getMonthDays(calendar.get(calendar.YEAR) + 1, 0);
else
prevMonthDays = getMonthDays(calendar.get(calendar.YEAR),
currentMonth + 1);
for (int i = week, day = prevMonthDays; i > 1; i--, day--)
{
days[i - 2] = "*" + String.valueOf(day);
}
for (int day = 1, i = week - 1; day <= monthDays; day++, i++)
{
days[i] = String.valueOf(day);
}
for (int i = week + monthDays - 1, day = 1; i < days.length; i++, day++)
{
days[i] = "*" + String.valueOf(day);
}
}
private boolean isCurrentDay(int dayIndex, int currentDayIndex,
Rect cellRect)
{
if (cellX != -1 && cellY != -1)
{
if (cellX > cellRect.left && cellX < cellRect.right
&& cellY > cellRect.top && cellY < cellRect.bottom)
{
return true;
}
else
{
return false;
}
}
else
{
return dayIndex == currentDayIndex;
}
}
@Override
public void draw(Canvas canvas)
{
float left = borderMargin;
float top = borderMargin + weekNameSize + weekNameMargin * 2 + 4;
float calendarWidth = view.getMeasuredWidth() - borderMargin * 2;
float calendarHeight = view.getMeasuredHeight() - top;
float cellWidth = calendarWidth / 7;
float cellHeight = calendarHeight / 6;
paint.setColor(innerGridColor);
canvas.drawLine(left, top, left + view.getMeasuredWidth()
- borderMargin * 2, top, paint);
// 画横线
for (int i = 1; i < 6; i++)
{
canvas.drawLine(left, top + (cellHeight - 1) * i, left
+ calendarWidth, top + (cellHeight - 1) * i, paint);
}
// 画竖线
for (int i = 1; i < 7; i++)
{
canvas.drawLine(left + cellWidth * i, top, left + cellWidth * i,
view.getMeasuredHeight() - borderMargin, paint);
}
// 画日期
if (cellX < borderMargin
|| cellX > (view.getMeasuredWidth() - borderMargin)
|| cellY < top
|| cellY > (view.getMeasuredHeight() - borderMargin))
{
cellX = oldCellX;
cellY = oldCellY;
}
java.util.Calendar calendar = java.util.Calendar.getInstance();
int day = calendar.get(calendar.DATE);
calendar.set(calendar.get(calendar.YEAR), calendar.get(calendar.MONTH),
1);
int week = calendar.get(calendar.DAY_OF_WEEK);
int currentDayIndex = week + day - 2;
boolean flag = false;
for (int i = 0; i < days.length; i++)
{
int row = i / 7;
int col = i % 7;
String text = String.valueOf(days[i]);
if (text.startsWith("*"))
{
paint.setColor(prevNextMonthDayColor);
}
else
{
paint.setColor(dayColor);
}
text = text.startsWith("*") ? text.substring(1) : text;
Rect dst = new Rect();
dst.left = (int) (left + cellWidth * col);
dst.top = (int) (top + (cellHeight - 1) * row);
dst.bottom = (int) (dst.top + cellHeight);
dst.right = (int) (dst.left + cellWidth + 2);
paint.setTextSize(daySize);
float textLeft = left + cellWidth * col
+ (cellWidth - paint.measureText(text)) / 2;
float textTop = top + (cellHeight - 1) * row
+ (cellHeight - paint.getTextSize()) / 2 + dayTopOffset;
if (isCurrentDay(i, currentDayIndex, dst) && flag == false)
{
paint.setTextSize(currentDaySize);
flag = true;
Bitmap bitmap = BitmapFactory.decodeResource(activity
.getResources(), R.drawable.day);
Rect src = new Rect();
src.left = 0;
src.top = 0;
src.right = bitmap.getWidth();
src.bottom = bitmap.getHeight();
canvas.drawBitmap(bitmap, src, dst, paint);
paint.setColor(currentDayColor);
}
canvas.drawText(text, textLeft, textTop, paint);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
android程序calendar (112个子文件)
resources.ap_ 288KB
Calendar.apk 305KB
Grid.class 10KB
Main$OnMyDateMenuItemClick.class 4KB
Main.class 3KB
AllRecord.class 3KB
Main$OnRecordRemindMenuItemClick.class 2KB
Week.class 2KB
CalendarView.class 2KB
R$drawable.class 2KB
Main$OnTodayMenuItemClick.class 2KB
Calendar.class 1KB
AllRecord$OnDeleteRecordMenuItemClick.class 1KB
Border.class 1KB
CalendarParent.class 1KB
R$color.class 991B
R.class 887B
R$id.class 804B
R$dimen.class 688B
AllRecord$MenuItemClickParent.class 667B
Main$MenuItemClickParent.class 637B
R$layout.class 577B
R$string.class 569B
R$raw.class 482B
R$array.class 460B
R$style.class 452B
Remind.class 447B
R$attr.class 370B
CalendarElement.class 197B
.classpath 280B
classes.dex 25KB
a2009091577014265.gif 8KB
Grid.java 14KB
R.java 6KB
Main.java 6KB
AllRecord.java 2KB
Week.java 1KB
CalendarParent.java 1KB
CalendarView.java 1KB
Border.java 936B
Calendar.java 897B
Remind.java 198B
CalendarElement.java 168B
background.jpg 18KB
a11.jpg 9KB
a10.jpg 8KB
a02.jpg 8KB
a07.jpg 8KB
a12.jpg 8KB
b09.jpg 7KB
a06.jpg 7KB
a01.jpg 7KB
a09.jpg 7KB
a08.jpg 7KB
a05.jpg 7KB
b12.jpg 7KB
b01.jpg 7KB
a03.jpg 7KB
b06.jpg 7KB
b10.jpg 7KB
b11.jpg 7KB
b05.jpg 6KB
a04.jpg 6KB
b03.jpg 6KB
b04.jpg 6KB
b08.jpg 5KB
b07.jpg 5KB
b02.jpg 5KB
calendar1.png 89KB
rrlist1.png 42KB
day.png 35KB
calendar_small.png 35KB
diary.png 34KB
calendar.png 33KB
about.png 33KB
msg.png 30KB
clock.png 28KB
newrecord.png 28KB
festival.png 28KB
weather.png 27KB
rrlist.png 27KB
help.png 24KB
setting.png 24KB
u92.png 1KB
u96.png 377B
org.eclipse.core.resources.prefs 112B
.project 851B
default.properties 469B
backup.txt 6KB
help.txt 546B
help.txt 546B
plan.txt 18B
weather.xml 3KB
main.xml 1KB
remindsetting.xml 1KB
web.xml 942B
web.xml 919B
web.xml 919B
colors.xml 894B
AndroidManifest.xml 883B
共 112 条
- 1
- 2
资源评论
- huanya232012-08-03不能用啊,也没有注释 挺乱的。
- a2794005072012-12-01下来能装在手机上用,可是模拟器运行不知道为什么有问题
neu_fangkun
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功