@@ -93,6 +93,7 @@ private enum NewEventScrollDirection {
9393 private boolean creatingNewEvent = false ;
9494 private boolean movingNewEvent = false ;
9595 private NewEventScrollDirection mCurrentNewEventScrollDirection = NewEventScrollDirection .NONE ;
96+ private float mNewEventDragOffset = 0 ;
9697
9798 // Attributes and their default values.
9899 private int mHourHeight = 50 ;
@@ -183,7 +184,7 @@ public boolean onDown(MotionEvent e) {
183184 }
184185
185186 @ Override
186- public boolean onSingleTapUp (MotionEvent e ){
187+ public boolean onSingleTapUp (MotionEvent e ) {
187188 Log .d ("QuivrWeekView" , "singleTapUp" );
188189 goToNearestOrigin ();
189190 boolean wasEmptyClick = true ;
@@ -195,16 +196,16 @@ public boolean onSingleTapUp(MotionEvent e){
195196 Collections .reverse (reversedEventRects );
196197 for (EventRect eventRect : reversedEventRects ) {
197198 if (eventRect .rectF != null && eventRect .rectF .contains (e .getX (), e .getY ())) {
198- if (mNewEventIdentifier .equals (eventRect .event .getIdentifier ())) {
199- mAddEventClickListener .onAddEventClicked (mNewEventRect .event .getStartTime (), mNewEventRect .event .getEndTime ());
200- // Do this later, as we are iterating over this list currently
201- doRemoveNewEvent = true ;
202- creatingNewEvent = false ;
203- } else {
204- mEventClickListener .onEventClick (eventRect .originalEvent , eventRect .rectF );
205- playSoundEffect (SoundEffectConstants .CLICK );
206- }
207- wasEmptyClick = false ;
199+ if (mNewEventIdentifier .equals (eventRect .event .getIdentifier ())) {
200+ mAddEventClickListener .onAddEventClicked (mNewEventRect .event .getStartTime (), mNewEventRect .event .getEndTime ());
201+ // Do this later, as we are iterating over this list currently
202+ doRemoveNewEvent = true ;
203+ creatingNewEvent = false ;
204+ } else {
205+ mEventClickListener .onEventClick (eventRect .originalEvent , eventRect .rectF );
206+ playSoundEffect (SoundEffectConstants .CLICK );
207+ }
208+ wasEmptyClick = false ;
208209 }
209210 }
210211 }
@@ -214,7 +215,8 @@ public boolean onSingleTapUp(MotionEvent e){
214215
215216 // If the tap was on an empty space, then trigger the callback.
216217 if (wasEmptyClick && (mEmptyViewClickListener != null || mAddEventClickListener != null ) && e .getX () > mHeaderColumnWidth && e .getY () > (mHeaderHeight + mHeaderRowPadding * 2 + mHeaderMarginBottom )) {
217- startNewEventAdding (e );
218+ mNewEventDragOffset = 0 ;
219+ startNewEventAdding (e );
218220 }
219221
220222 return super .onSingleTapUp (e );
@@ -355,9 +357,13 @@ public void onLongPress(MotionEvent e) {
355357 }
356358 };
357359
358- public boolean wasOnNewEventRect ( MotionEvent e ) {
360+ private EventRect getNewEventRectWithCorrectDims ( ) {
359361 Optional <EventRect > newEventRectWithCorrectDims = mEventRects .stream ().filter (r -> r .event .getIdentifier ().equals (getNewEventIdentifier ())).findFirst ();
360- EventRect eventRect = newEventRectWithCorrectDims .orElse (null );
362+ return newEventRectWithCorrectDims .orElse (null );
363+ }
364+
365+ public boolean wasOnNewEventRect (MotionEvent e ) {
366+ EventRect eventRect = getNewEventRectWithCorrectDims ();
361367 return eventRect != null && eventRect .rectF != null && eventRect .rectF .contains (e .getX (), e .getY ());
362368 }
363369
@@ -2487,12 +2493,14 @@ public boolean onTouchEvent(MotionEvent event) {
24872493 mScaleDetector .onTouchEvent (event );
24882494 boolean val = mGestureDetector .onTouchEvent (event );
24892495 if (event .getAction () == MotionEvent .ACTION_DOWN && creatingNewEvent && wasOnNewEventRect (event )) {
2490- // goToNearestOrigin();
24912496 movingNewEvent = true ;
2497+ EventRect mNewEventRectCorrectDims = getNewEventRectWithCorrectDims ();
2498+ mNewEventDragOffset = event .getY () - (mNewEventRectCorrectDims .rectF .top + mNewEventRectCorrectDims .rectF .bottom ) / 2 ;
24922499 startNewEventAdding (event );
24932500 }
24942501
24952502 if (event .getAction () == MotionEvent .ACTION_UP && movingNewEvent ) {
2503+ stopScrolling ();
24962504 movingNewEvent = false ;
24972505 }
24982506
@@ -2718,7 +2726,9 @@ public boolean dateIsValid(Calendar day) {
27182726
27192727 private void updateNewEvent (MotionEvent e ) {
27202728 Log .d ("QuivrWeekView" , String .format ("updateNewEvent: %s%n" , e .toString ()));
2721- Calendar selectedTime = getTimeFromPoint (e .getX (), e .getY ());
2729+ Log .d ("QuivrWeekView" , String .format (Float .valueOf (mNewEventDragOffset ).toString ()));
2730+ Log .d ("QuivrWeekView" , String .format (Float .valueOf (e .getY ()).toString ()));
2731+ Calendar selectedTime = getTimeFromPoint (e .getX (), e .getY () - mNewEventDragOffset );
27222732 if (selectedTime != null ) {
27232733 List <WeekViewEvent > tempEvents = new ArrayList <>(mEvents );
27242734 if (mNewEventRect != null ) {
0 commit comments