@@ -101,6 +101,8 @@ public class WeekView extends View {
101
101
private EventClickListener mEventClickListener ;
102
102
private EventLongPressListener mEventLongPressListener ;
103
103
private MonthChangeListener mMonthChangeListener ;
104
+ private HourClickListener mHourClickListener ;
105
+
104
106
private final GestureDetector .SimpleOnGestureListener mGestureListener = new GestureDetector .SimpleOnGestureListener () {
105
107
106
108
@ Override
@@ -158,10 +160,18 @@ public boolean onSingleTapConfirmed(MotionEvent e) {
158
160
if (event .rectF != null && e .getX () > event .rectF .left && e .getX () < event .rectF .right && e .getY () > event .rectF .top && e .getY () < event .rectF .bottom ) {
159
161
mEventClickListener .onEventClick (event .originalEvent , event .rectF );
160
162
playSoundEffect (SoundEffectConstants .CLICK );
161
- break ;
163
+ return super . onSingleTapConfirmed ( e ) ;
162
164
}
163
165
}
164
166
}
167
+ if (mHourClickListener != null ) {
168
+ Calendar selectedTime = getTimeFromPoint (e .getX (), e .getY ());
169
+ mHourClickListener .onHourClicked (selectedTime );
170
+ }
171
+ else {
172
+ throw new IllegalStateException ("You must provide a HourClickListener" );
173
+ }
174
+
165
175
return super .onSingleTapConfirmed (e );
166
176
}
167
177
@@ -461,6 +471,30 @@ private void drawHeaderRowAndEvents(Canvas canvas) {
461
471
462
472
}
463
473
474
+ private Calendar getTimeFromPoint (float x , float y ){
475
+ int leftDaysWithGaps = (int ) -(Math .ceil (mCurrentOrigin .x / (mWidthPerDay + mColumnGap )));
476
+ float startFromPixel = mCurrentOrigin .x + (mWidthPerDay + mColumnGap ) * leftDaysWithGaps +
477
+ mHeaderColumnWidth ;
478
+ float startPixel = startFromPixel ;
479
+ for (int dayNumber = leftDaysWithGaps + 1 ;
480
+ dayNumber <= leftDaysWithGaps + mNumberOfVisibleDays + 1 ;
481
+ dayNumber ++) {
482
+ float start = (startPixel < mHeaderColumnWidth ? mHeaderColumnWidth : startPixel );
483
+ if (mWidthPerDay + startPixel - start > 0
484
+ && x >start && x <startPixel + mWidthPerDay ){
485
+ Calendar day = (Calendar ) mToday .clone ();
486
+ day .add (Calendar .DATE , dayNumber - 1 );
487
+ float pixelsFromZero = y - mCurrentOrigin .y - mHeaderTextHeight
488
+ - mHeaderRowPadding * 2 - mTimeTextHeight /2 - mHeaderMarginBottom ;
489
+ int hour = (int )(pixelsFromZero / mHourHeight );
490
+ day .add (Calendar .HOUR , hour );
491
+ return day ;
492
+ }
493
+ startPixel += mWidthPerDay + mColumnGap ;
494
+ }
495
+ return null ;
496
+ }
497
+
464
498
/**
465
499
* Draw all the events of a particular day.
466
500
* @param date The day.
@@ -880,6 +914,15 @@ public void setEventLongPressListener(EventLongPressListener eventLongPressListe
880
914
this .mEventLongPressListener = eventLongPressListener ;
881
915
}
882
916
917
+ public HourClickListener getHourClickListener (){
918
+ return mHourClickListener ;
919
+ }
920
+
921
+ public void setHourClickListener (HourClickListener mHourClickListener ){
922
+ this .mHourClickListener = mHourClickListener ;
923
+ }
924
+
925
+
883
926
/**
884
927
* Get the number of visible days in a week.
885
928
* @return The number of visible days in a week.
@@ -1267,6 +1310,14 @@ public interface EventLongPressListener {
1267
1310
public void onEventLongPress (WeekViewEvent event , RectF eventRect );
1268
1311
}
1269
1312
1313
+ /**
1314
+ * Added by Fan Chen on 12/19/2014
1315
+ */
1316
+ public interface HourClickListener {
1317
+ public void onHourClicked (Calendar startTime );
1318
+ }
1319
+
1320
+
1270
1321
/////////////////////////////////////////////////////////////////
1271
1322
//
1272
1323
// Helper methods.
0 commit comments