Skip to content

Commit 941728b

Browse files
alamkanakFan Chen
authored andcommitted
Added an interface that, when a single tap on weekview occurs, it gives the corresponding time(java.util.Calendar).
1 parent 3aaf5c6 commit 941728b

File tree

1 file changed

+52
-1
lines changed

1 file changed

+52
-1
lines changed

library/src/main/java/com/alamkanak/weekview/WeekView.java

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ public class WeekView extends View {
101101
private EventClickListener mEventClickListener;
102102
private EventLongPressListener mEventLongPressListener;
103103
private MonthChangeListener mMonthChangeListener;
104+
private HourClickListener mHourClickListener;
105+
104106
private final GestureDetector.SimpleOnGestureListener mGestureListener = new GestureDetector.SimpleOnGestureListener() {
105107

106108
@Override
@@ -158,10 +160,18 @@ public boolean onSingleTapConfirmed(MotionEvent e) {
158160
if (event.rectF != null && e.getX() > event.rectF.left && e.getX() < event.rectF.right && e.getY() > event.rectF.top && e.getY() < event.rectF.bottom) {
159161
mEventClickListener.onEventClick(event.originalEvent, event.rectF);
160162
playSoundEffect(SoundEffectConstants.CLICK);
161-
break;
163+
return super.onSingleTapConfirmed(e);
162164
}
163165
}
164166
}
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+
165175
return super.onSingleTapConfirmed(e);
166176
}
167177

@@ -461,6 +471,30 @@ private void drawHeaderRowAndEvents(Canvas canvas) {
461471

462472
}
463473

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+
464498
/**
465499
* Draw all the events of a particular day.
466500
* @param date The day.
@@ -880,6 +914,15 @@ public void setEventLongPressListener(EventLongPressListener eventLongPressListe
880914
this.mEventLongPressListener = eventLongPressListener;
881915
}
882916

917+
public HourClickListener getHourClickListener(){
918+
return mHourClickListener;
919+
}
920+
921+
public void setHourClickListener(HourClickListener mHourClickListener){
922+
this.mHourClickListener = mHourClickListener;
923+
}
924+
925+
883926
/**
884927
* Get the number of visible days in a week.
885928
* @return The number of visible days in a week.
@@ -1267,6 +1310,14 @@ public interface EventLongPressListener {
12671310
public void onEventLongPress(WeekViewEvent event, RectF eventRect);
12681311
}
12691312

1313+
/**
1314+
* Added by Fan Chen on 12/19/2014
1315+
*/
1316+
public interface HourClickListener{
1317+
public void onHourClicked(Calendar startTime);
1318+
}
1319+
1320+
12701321
/////////////////////////////////////////////////////////////////
12711322
//
12721323
// Helper methods.

0 commit comments

Comments
 (0)