@@ -171,7 +171,7 @@ private void ensureTarget() {
171
171
@ Override
172
172
public boolean onInterceptTouchEvent (MotionEvent ev ) {
173
173
174
- if (!isEnabled () || canChildScrollUp ()) {
174
+ if (!isEnabled () || ( canChildScrollUp () && ! mRefreshing )) {
175
175
return false ;
176
176
}
177
177
@@ -219,6 +219,7 @@ public boolean onInterceptTouchEvent(MotionEvent ev) {
219
219
}
220
220
221
221
return mIsBeingDragged ;
222
+ // return false;
222
223
}
223
224
224
225
@ Override
@@ -242,7 +243,10 @@ public boolean onTouchEvent(MotionEvent ev) {
242
243
int targetY ;
243
244
if (mRefreshing ) {
244
245
targetY = (int ) (mInitialOffsetTop + yDiff );
245
- if (targetY < 0 ) {
246
+ if (canChildScrollUp ()) {
247
+ targetY = -1 ;
248
+ mInitialMotionY = y ;
249
+ mInitialOffsetTop = 0 ;
246
250
if (mDispatchTargetTouchDown ) {
247
251
mTarget .dispatchTouchEvent (ev );
248
252
} else {
@@ -251,9 +255,27 @@ public boolean onTouchEvent(MotionEvent ev) {
251
255
mDispatchTargetTouchDown = true ;
252
256
mTarget .dispatchTouchEvent (obtain );
253
257
}
254
- targetY = 0 ;
255
- } else if (targetY > mTotalDragDistance ) {
256
- targetY = mTotalDragDistance ;
258
+ } else {
259
+ if (targetY < 0 ) {
260
+ if (mDispatchTargetTouchDown ) {
261
+ mTarget .dispatchTouchEvent (ev );
262
+ } else {
263
+ MotionEvent obtain = MotionEvent .obtain (ev );
264
+ obtain .setAction (MotionEvent .ACTION_DOWN );
265
+ mDispatchTargetTouchDown = true ;
266
+ mTarget .dispatchTouchEvent (obtain );
267
+ }
268
+ targetY = 0 ;
269
+ } else if (targetY > mTotalDragDistance ) {
270
+ targetY = mTotalDragDistance ;
271
+ } else {
272
+ if (mDispatchTargetTouchDown ) {
273
+ MotionEvent obtain = MotionEvent .obtain (ev );
274
+ obtain .setAction (MotionEvent .ACTION_CANCEL );
275
+ mDispatchTargetTouchDown = false ;
276
+ mTarget .dispatchTouchEvent (obtain );
277
+ }
278
+ }
257
279
}
258
280
} else {
259
281
final float scrollTop = yDiff * DRAG_RATE ;
0 commit comments