fix(android): scroll view page scroll problem

This commit is contained in:
maxli
2021-10-27 14:38:15 +08:00
committed by zoomchan-cxj
parent d1924d676b
commit 2b22b5fcd5
2 changed files with 35 additions and 14 deletions
@@ -18,6 +18,7 @@ package com.tencent.mtt.hippy.views.scroll;
import android.animation.ValueAnimator;
import android.content.Context;
import android.os.Build;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.HorizontalScrollView;
@@ -137,7 +138,6 @@ public class HippyHorizontalScrollView extends HorizontalScrollView implements H
int action = event.getAction() & MotionEvent.ACTION_MASK;
if (action == MotionEvent.ACTION_DOWN && !mDragging) {
mDragging = true;
startScrollX = getScrollX();
if (mScrollBeginDragEventEnable) {
LogUtils.d("HippyHorizontalScrollView", "emitScrollBeginDragEvent");
HippyScrollViewEventHelper.emitScrollBeginDragEvent(this);
@@ -173,6 +173,12 @@ public class HippyHorizontalScrollView extends HorizontalScrollView implements H
if (!mScrollEnabled) {
return false;
}
int action = event.getAction() & MotionEvent.ACTION_MASK;
if (action == MotionEvent.ACTION_DOWN) {
startScrollX = getScrollX();
}
if (super.onInterceptTouchEvent(event)) {
if (mScrollBeginDragEventEnable) {
LogUtils.d("HippyHorizontalScrollView", "emitScrollBeginDragEvent");
@@ -223,22 +229,27 @@ public class HippyHorizontalScrollView extends HorizontalScrollView implements H
}
protected void doPageScroll() {
smoothScrollToPage();
if (mMomentumScrollBeginEventEnable) {
HippyScrollViewEventHelper.emitScrollMomentumBeginEvent(this);
}
smoothScrollToPage();
Runnable runnable = new Runnable() {
@Override
public void run() {
if (mMomentumScrollEndEventEnable) {
HippyScrollViewEventHelper.emitScrollMomentumEndEvent(HippyHorizontalScrollView.this);
if (mDoneFlinging) {
if (mMomentumScrollEndEventEnable) {
HippyScrollViewEventHelper.emitScrollMomentumEndEvent(HippyHorizontalScrollView.this);
}
} else {
mDoneFlinging = true;
postOnAnimationDelayed(this, HippyScrollViewEventHelper.MOMENTUM_DELAY);
}
}
};
postOnAnimationDelayed(runnable, HippyScrollViewEventHelper.MOMENTUM_DELAY * 2);
postOnAnimationDelayed(runnable, HippyScrollViewEventHelper.MOMENTUM_DELAY);
}
@Override
@@ -283,7 +294,7 @@ public class HippyHorizontalScrollView extends HorizontalScrollView implements H
if ((page == maxPage - 1) && offset > 0) {
page = page + 1;
} else if (Math.abs(offset) > width/4) {
} else if (Math.abs(offset) > width/5) {
page = (offset > 0) ? page + 1 : page - 1;
}
@@ -117,7 +117,6 @@ public class HippyVerticalScrollView extends ScrollView implements HippyViewBase
int action = event.getAction() & MotionEvent.ACTION_MASK;
if (action == MotionEvent.ACTION_DOWN && !mDragging) {
mDragging = true;
startScrollY = getScrollY();
if (mScrollBeginDragEventEnable) {
HippyScrollViewEventHelper.emitScrollBeginDragEvent(this);
}
@@ -154,6 +153,12 @@ public class HippyVerticalScrollView extends ScrollView implements HippyViewBase
if (!mScrollEnabled) {
return false;
}
int action = event.getAction() & MotionEvent.ACTION_MASK;
if (action == MotionEvent.ACTION_DOWN) {
startScrollY = getScrollY();
}
if (super.onInterceptTouchEvent(event)) {
if (mScrollBeginDragEventEnable) {
HippyScrollViewEventHelper.emitScrollBeginDragEvent(this);
@@ -207,22 +212,27 @@ public class HippyVerticalScrollView extends ScrollView implements HippyViewBase
}
protected void doPageScroll() {
smoothScrollToPage();
if (mMomentumScrollBeginEventEnable) {
HippyScrollViewEventHelper.emitScrollMomentumBeginEvent(this);
}
smoothScrollToPage();
Runnable runnable = new Runnable() {
@Override
public void run() {
if (mMomentumScrollEndEventEnable) {
HippyScrollViewEventHelper.emitScrollMomentumEndEvent(HippyVerticalScrollView.this);
if (mDoneFlinging) {
if (mMomentumScrollEndEventEnable) {
HippyScrollViewEventHelper.emitScrollMomentumEndEvent(HippyVerticalScrollView.this);
}
} else {
mDoneFlinging = true;
postOnAnimationDelayed(this, HippyScrollViewEventHelper.MOMENTUM_DELAY);
}
}
};
postOnAnimationDelayed(runnable, HippyScrollViewEventHelper.MOMENTUM_DELAY * 2);
postOnAnimationDelayed(runnable, HippyScrollViewEventHelper.MOMENTUM_DELAY);
}
@Override
@@ -267,7 +277,7 @@ public class HippyVerticalScrollView extends ScrollView implements HippyViewBase
if ((page == maxPage - 1) && offset > 0) {
page = page + 1;
} else if (Math.abs(offset) > height/4) {
} else if (Math.abs(offset) > height/5) {
page = (offset > 0) ? page + 1 : page - 1;
}