打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
日历控件开发详解1

在前一篇日志中我们已经做好了日历控件的准备工作,今天我们将继续完成这个日历控件。

三、日历元素之Border

在Border类中,我们主要完成日历边框的绘制

  1. package com.xys.mycalender.element;  
  2.   
  3. import android.app.Activity;  
  4. import android.graphics.Canvas;  
  5. import android.view.View;  
  6.   
  7. import com.xys.mycalender.R;  
  8. import com.xys.mycalender.base.CalendarBase;  
  9. /* 
  10.  * 绘制日历边框 
  11.  */  
  12. public class Border extends CalendarBase {  
  13.       
  14.     //日历边框的位置大小  
  15.     float left;  
  16.     float right;  
  17.     float top;  
  18.     float bottom;  
  19.       
  20.     public Border(Activity activity, View view) {  
  21.         super(activity, view);  
  22.         // 获取日历边框的颜色  
  23.         paint.setColor(activity.getResources().getColor(R.color.border_color));  
  24.     }  
  25.   
  26.     @Override  
  27.     public void onDraw(Canvas canvas) {  
  28.         left=boderMargin;  
  29.         right=view.getMeasuredWidth()-boderMargin;  
  30.         top=boderMargin;  
  31.         bottom=view.getMeasuredHeight()-boderMargin;  
  32.           
  33.         // 绘制日历边框  
  34.         canvas.drawLine(left, top, right, top, paint);  
  35.         canvas.drawLine(left, top, left, bottom, paint);  
  36.         canvas.drawLine(left, bottom, right, bottom, paint);  
  37.         canvas.drawLine(right, top, right, bottom, paint);  
  38.     }  
  39.       
  40.       
  41. }  

四、日历元素之Week名称

在Week类中我们主要完成一周名称的绘制

  1. package com.xys.mycalender.element;  
  2.   
  3. import android.app.Activity;  
  4. import android.graphics.Canvas;  
  5. import android.view.View;  
  6.   
  7. import com.xys.mycalender.R;  
  8. import com.xys.mycalender.base.CalendarBase;  
  9. /* 
  10.  * 绘制一周的名称 
  11.  */  
  12. public class Week extends CalendarBase {  
  13.     //参数  
  14.     private float left;  
  15.     private float top;  
  16.     private float eachWeekWidth;  
  17.     private float eachWeekHeight;  
  18.       
  19.     //一周的名称  
  20.     private String[] weeknames;  
  21.     //一周名称的颜色1-5  
  22.     private int weekdayColor;  
  23.       
  24.     public Week(Activity activity, View view) {  
  25.         super(activity, view);  
  26.         //获取一周名称颜色1-5  
  27.         weekdayColor=activity.getResources().getColor(R.color.weekname_color);  
  28.         //获取一周名称  
  29.         weeknames=activity.getResources().getStringArray(R.array.week_name);  
  30.         //设置一周名称大小  
  31.         paint.setTextSize(weekNameSize);  
  32.         paint.setFakeBoldText(true);  
  33.     }  
  34.   
  35.     @Override  
  36.     public void onDraw(Canvas canvas) {  
  37.         // TODO Auto-generated method stub  
  38.         left=boderMargin;  
  39.         top=boderMargin;  
  40.         eachWeekWidth=(view.getMeasuredWidth()-boderMargin*2)/7;  
  41.         eachWeekHeight=eachWeekWidth;  
  42.         for (int i = 0; i < weeknames.length; i++) {  
  43.             //周六日  
  44.             if (i==0||i==weeknames.length-1) {  
  45.                 paint.setColor(weekendColor);  
  46.             }else {  
  47.                 //平日  
  48.                 paint.setColor(weekdayColor);  
  49.             }  
  50.             //文字绘制在每一格的中间 measureText返回文字的长度  
  51.             left=boderMargin+eachWeekWidth*i+(eachWeekWidth-paint.measureText(weeknames[i]))/2;  
  52.             top=boderMargin+weekNameMargin+paint.getTextSize();  
  53.             //开始绘制  
  54.             canvas.drawText(weeknames[i], left, top, paint);  
  55.         }  
  56.     }  
  57.       
  58. }  

绘制一周名称的关键在于要将文字绘制在格子的中间,这点的实现见程序倒数2、3行。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Android APIDemos 研读之二:android.graphics.Camera...
android 自定义View 画板的基本使用
android 美化zxing二维码扫描框
Drawable、Bitmap、Canvas和Paint的关系(供复习) - Android开发进阶交流 - eoe·Android开发社区 |安致|最棒Android开发|安致开发|最好Andriod社区|安致开发者|Android论坛 - Powered by Discuz!
Android开发网上的一些重要知识点
android?清除canvas?笔迹代码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服