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 实例代码(下) 进阶篇 (1827个子文件)
resources.ap_ 1.18MB
resources.ap_ 929KB
resources.ap_ 681KB
resources.ap_ 557KB
resources.ap_ 362KB
resources.ap_ 304KB
resources.ap_ 256KB
resources.ap_ 211KB
resources.ap_ 211KB
resources.ap_ 145KB
resources.ap_ 82KB
resources.ap_ 81KB
resources.ap_ 81KB
resources.ap_ 67KB
resources.ap_ 67KB
resources.ap_ 67KB
resources.ap_ 59KB
resources.ap_ 58KB
resources.ap_ 56KB
resources.ap_ 56KB
resources.ap_ 55KB
resources.ap_ 47KB
resources.ap_ 40KB
resources.ap_ 40KB
resources.ap_ 22KB
resources.ap_ 13KB
resources.ap_ 12KB
resources.ap_ 12KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 10KB
resources.ap_ 9KB
resources.ap_ 9KB
resources.ap_ 9KB
resources.ap_ 8KB
resources.ap_ 8KB
resources.ap_ 8KB
resources.ap_ 8KB
resources.ap_ 6KB
resources.ap_ 6KB
resources.ap_ 6KB
resources.ap_ 6KB
resources.ap_ 6KB
resources.ap_ 5KB
resources.ap_ 5KB
resources.ap_ 5KB
resources.ap_ 5KB
resources.ap_ 5KB
resources.ap_ 5KB
resources.ap_ 5KB
resources.ap_ 5KB
resources.ap_ 5KB
resources.ap_ 5KB
resources.ap_ 5KB
resources.ap_ 5KB
resources.ap_ 4KB
resources.ap_ 4KB
resources.ap_ 4KB
resources.ap_ 4KB
resources.ap_ 4KB
resources.ap_ 4KB
resources.ap_ 1KB
ch11_playsubframe.apk 1.18MB
ch15_digitclock_activity.apk 936KB
ch15_digitclock.apk 685KB
ch11_galaxy.apk 561KB
ch25_gtalk.apk 458KB
ch11_viewflipper.apk 366KB
ch24_calendar.apk 333KB
ch13_i18n.apk 259KB
ch11_frameanim.apk 216KB
ch11_gifanim.apk 216KB
ch13_themes.apk 148KB
ch11_translate.apk 86KB
ch11_ballanim.apk 84KB
ch11_Interceptor.apk 84KB
ch18_livewallpapers.apk 74KB
ch15_addshortcut.apk 74KB
ch15_installshortcut.apk 73KB
ch14_multipoint.apk 62KB
ch12_animate.apk 61KB
ch13_color.apk 59KB
ch13_icontextview.apk 59KB
ch13_drawable.apk 50KB
ch11_putbomb.apk 45KB
ch14_compass.apk 43KB
ch13_menu.apk 26KB
ch20_bluetooth.apk 25KB
ch22_vtapi.apk 21KB
ch22_searchapi.apk 20KB
ch19_gesture_builder.apk 16KB
ch19_tts.apk 15KB
ch19_gesture_action.apk 15KB
ch19_gesture_text.apk 15KB
ch14_camera.apk 15KB
ch18_interpolators.apk 15KB
ch11_heart.apk 15KB
ch14_gps.apk 14KB
共 1827 条
- 1
- 2
- 3
- 4
- 5
- 6
- 19
资源评论
xlf870515
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功