android Calendar4.0源码分析之Dayview

泡在网上的日子 / 文 发表于2014-09-10 11:17 次阅读 calendar

事件Event的绘制在drawEvents中完成的。

在drawEvents中,绘制event之前会先通过geometry.computeEventRect(date, left, top, cellWidth, event)测量每个event在视图中所占据的矩形区域。然后调用drawEventRect绘制一个矩形,再调用drawEventText绘制文字。

测量event的geometry是一个EventGeometry类的对象,测量矩形区域上下位置的重要依据是这个event的起始时间和结束时间以及时间单位的高度cellHeight,因为dayview是一个可以垂直缩放的View因此这个cellHeight是可变的。所以在使用EventGeometry测量之前必须保证cellHeight是正确的,反映在程序中就是当每个单元格的高度变化之后调用EventGeometry的setHourHeight(mCellHeight)方法;而测量左右位置的依据主要是某个event所在的小时有多少个event,该event属于第几个, 这个过程是 Event.computePositions(mEvents, minimumDurationMillis)计算出来的,computePositions将上述的两个值分别赋予Event的mMaxColumns和mColumn两个成员变量。然后EventGeometry的方法computeEventRect根据这两个变量值得出每个event具体的左右位置:

float colWidth = (float) (cellWidth - (maxCols + 1) * mCellMargin) / (float) maxCols;
event.left = left + col * (colWidth + mCellMargin);
event.right = event.left + colWidth;


收藏 赞 (0) 踩 (2)
上一篇:Android 涂鸦最佳实践
Android中实现手势绘图一般都两种方式,一是直接在View上绘制,而是使用SurfaceView。两者还是有一些区别的,简单介绍下。View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面,速度较慢。 SurfaceView:基于v
下一篇:ViewDragHelper详解
2013年谷歌i/o大会上介绍了两个新的layout: SlidingPaneLayout 和 DrawerLayout ,现在这俩个类被广泛的运用,其实研究他们的源码你会发现这两个类都运用了ViewDragHelper来处理拖动。 ViewDragHelper解决了android中手势处理过于复杂的问题,在 DrawerLayo