Skip to content

Commit de76570

Browse files
committed
fix: glitch when starting dragging a new event
1 parent b7d4434 commit de76570

File tree

1 file changed

+26
-16
lines changed

1 file changed

+26
-16
lines changed

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

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)