基于android的日程管理的设计和实现内容摘要:

layout_height = wrap_content android:textColor=@color/text_color / TextView android:id = @ +id/tvMsg2 android:layout_width=fill_parent android:layout_height = wrap_content android:textColor=@color/text_color / TextView android:id = @ +id/tvMsg3 android: layout_width=fill_parent android:layout_height = wrap_content android:textColor=@color/text_color / /LinearLayout /RelativeLayout /LinearLayout 下面在 Main 类的 Oncreate 方法中编写代码装载 : public void onCreate(Bundle savedInstanceState) { (savedInstanceState)。 LinearLayout mainLayout = (LinearLayout) getLayoutInflater(). inflate(, null)。 setContentView(mainLayout)。 // 需要向 mainLayout 中加入日历网络 } 在绘制日历之前 , 要先 说明 一下日 历绘制的方法。 虽然从底层技术来看 , 绘制日历是在 onDraw 方法中完成的。 但在本系统中将要绘制的部分分成了很多块。 而这些要绘制的块都需要放在一个叫 CalendarView 的类中 , 代码如下 : public class CalendarView extends View { private Activity activity。 @Override protected void onDraw(Canvas canvas) {} public CalendarView(Activity activity) { super(activity)。 = activity。 } } 在编写完 CalendarView 类后 , 需要在 Main 类中定义该类的变量 , 并 在 基于 Android 的日程管理的设计和实现 12 onCreate 方法中创建类的对象实例 , 代码如下 : private CalendarViewcalendarView。 calendarView = new CalendarView(this)。 (calendarView)。 在前面已经介绍过 , 在本系统中会将要绘制的日历分成若干块 , 而每一块都 需要有同样的接口 , 以便统一绘制它们。 因此 , 这些块都要实现一 个 CalendarElement 接口。 这些要绘制的块包括日历边框 、 网络 、 日历头等 , 而在 CalendarElement 接口中有一个 draw 方法。 在绘制日历元素时只需调 用 draw 方法即可。 在后面的实现中会看到更多实现 CalendarElement 接口的类 , 下面先来编 写CalendarElement 接口。 package。 import。 public interface CalendarElement { public void draw(Canvas canvas)。 } package。 import。 public interface CalendarElement { public void draw(Canvas canvas)。 } 现在需要一个总的类来绘制上述的这些块。 这个功能由 Calendar 类来完成。 Calendar是一个总的日 历元素类 , 在该类的 draw方法中绘制了所有的日历元素。 Calendar 是第一个实现 CalendarElement 接口的类 , 代码如下 : public class Calendar extends CalendarParent { // elements 用于保存多功能日历中所有的日历元素 private ArrayList CalendarElement elements = new ArrayListCalendarElement()。 public Calendar(Activity activity, View view) { super(activity, view)。 } @Override public void draw(Canvas canvas) { // 在 draw 方法中通过扫描 elements 变量来获得所 //有日历元素的对象 , 并调用 draw 方法绘制这些日历元素 for (CalendarElement ce : elements) (canvas)。 } } 在 CalendarView 类中需要调用 Calendar 类来绘制日历 , 因此 , 需要 在 基于 Android 的日程管理的设计和实现 13 CalendarView 类中创建 Calendar 类的对象实例 , 并调用 draw 进行绘制 , 代码如下 : public Calendar ce。 @Override protected void onDraw(Canvas canvas) { (canvas)。 } public CalendarView(Activity activity) { ce = new Calendar(activity, this)。 } 下面编写第一个绘制元素类 : Border。 Border 类用于绘制日历的边框 , 该类是日历元素类 , 需要实现 CalendarElement 接口 , 不过该类只要继承刚实现的CalendarParent 类即可。 public class Border extends CalendarParent { public Border(Activity activity, View view) { super(activity, view)。 // 注意 , 一定要 4 个字节的颜色值 , 包括一个透明色 (0xFFFFFFFF)。 } @Override public void draw(Canvas canvas) { float left = borderMargin。 float top = borderMargin。 float right = () left。 float bottom = () top。 (left, top, right, top, paint)。 (right, top, right, bottom, paint)。 (right, bottom, left, bottom, paint)。 (left, bottom, left, top, paint)。 (draw,(right))。 } } Grid 类用于绘制日历的网格 , 该类是日历元素类 , 需要继承 CalendarParent类。 public class Grid extends CalendarParent { private float top, left。 @Override public void draw(Canvas canvas) 基于 Android 的日程管理的设计和实现 14 { left = borderMargin。 top = borderMargin + weekNameSize + weekNameMargin * 2 + 4。 float calendarWidth = () left * 2。 float calendarHeight = () top borderMargin。 float cellWidth = calendarWidth / 7。 float cellHeight = calendarHeight / 6。 (0xFFFFFFFF)。 (left, top, left + () borderMargin * 2, top, paint)。 (0xFF666666)。 // 画横线 for (int i = 1。 i 6。 i++) { (left, top + (cellHeight) * i, left + calendar Width, top + (cellHeight) * i, paint)。 } // 画竖线 for (int i = 1。 i 7。 i++) { (left + cellWidth * i, top, left + cellWidth * i, () borderMargin, paint)。 }} public Grid(Activity activity, View view) { super(activity, view)。 // TODO Autogenerated constructor stub }} Week 类用于显示日历网格上方的星期文本 : public class Week extends CalendarParent { private String[] weekNames = new String[] { 日 , 一 , 二 , 三 , 四 , 五 , 六 }。 private int weekNameColor。 public Week(Activity activity, View view) { super(activity, view)。 weekNameColor =。 (weekNameSize)。 } @Override 基于 Android 的日程管理的设计和实现 15 public void draw(Canvas canvas) { float left = borderMargin。 float top = borderMargin。 float everyWeekWidth = ( () borderMargin * 2) / 7。 (true)。 for (int i = 0。 i。 i++) { if (i == 0 || i == 1) (sundaySaturdayColor)。 else (weekNameColor)。 left = borderMargin + everyWeekWidth * i + (everyWeekWidth (weekNames [i])) / 2。 (weekNames[i], left, top + ()+ weekNameMargin, paint)。 }}} 前面 说明 了绘制日历的基本方法 , 现在 说明 日历系统的核心技术。 在 Grid 类中的 days数组保存了 42 个数字。 这 42 个数字就是日历主界面中的 6*7 个方格中的数字。 这些数字分为两部分 , 中间的部分就是当前月中的天数。 这些天数最小是 28天 , 最大是 31 天。 在这组数字的前后可以包含了上月的部分月末天数和下月部分月初天数。 当单击或触摸上月或下月的天数时 , 日历会跳到上月或下月。 这里说明 如何将这些数字绘制到这 42个方格中。 为了区别这两类数字。 将在上月和下月的相应天数中加星号 ( *), 代码如下 : private String[] days = new String[42]。 public int currentYear, currentMonth。 public int currentDay = 1, currentDay1 = 1, currentDayIndex = 1。 private calendar = . getInstance()。 在 Grid 类的构造方法中初始化变量的代码如下 : currentYear = ()。 currentMonth = ()。 下面来编写一个 getMonthDays 方法 , 该方法用来获得指定月份的天数。 这个方法也是绘制指定月份的日历的基础 , 代码如下 : private int。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。