diff --git a/app/src/main/java/com/gh/common/view/InterceptNestedScrollView.java b/app/src/main/java/com/gh/common/view/InterceptNestedScrollView.java deleted file mode 100644 index 4987e9e31e..0000000000 --- a/app/src/main/java/com/gh/common/view/InterceptNestedScrollView.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.gh.common.view; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.MotionEvent; - -import androidx.core.widget.NestedScrollView; - -public class InterceptNestedScrollView extends NestedScrollView { - - - public InterceptNestedScrollView(Context context) { - super(context); - } - - public InterceptNestedScrollView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - - @Override - public boolean dispatchTouchEvent(MotionEvent ev) { - getParent().requestDisallowInterceptTouchEvent(true); - return super.dispatchTouchEvent(ev); - } - -} diff --git a/app/src/main/java/com/gh/common/view/NestedScrollWebView.java b/app/src/main/java/com/gh/common/view/NestedScrollWebView.java new file mode 100644 index 0000000000..46b73bb3fc --- /dev/null +++ b/app/src/main/java/com/gh/common/view/NestedScrollWebView.java @@ -0,0 +1,164 @@ +package com.gh.common.view; +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.core.view.MotionEventCompat; +import androidx.core.view.NestedScrollingChild; +import androidx.core.view.NestedScrollingChildHelper; +import androidx.core.view.ViewCompat; +import wendu.dsbridge.DWebView; + +public class NestedScrollWebView extends DWebView implements NestedScrollingChild { + + public static final String TAG = NestedScrollWebView.class.getSimpleName(); + + private int mLastMotionY; + + private final int[] mScrollOffset = new int[2]; + private final int[] mScrollConsumed = new int[2]; + + private int mNestedYOffset; + private boolean mChange; + + private NestedScrollingChildHelper mChildHelper; + + public NestedScrollWebView(Context context) { + super(context); + init(); + } + + public NestedScrollWebView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + + private void init() { + mChildHelper = new NestedScrollingChildHelper(this); + setNestedScrollingEnabled(true); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + getParent().requestDisallowInterceptTouchEvent(true); + return super.dispatchTouchEvent(ev); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + boolean result = false; + + MotionEvent trackedEvent = MotionEvent.obtain(event); + + final int action = MotionEventCompat.getActionMasked(event); + + if (action == MotionEvent.ACTION_DOWN) { + mNestedYOffset = 0; + } + + int y = (int) event.getY(); + + event.offsetLocation(0, mNestedYOffset); + + switch (action) { + case MotionEvent.ACTION_DOWN: + mLastMotionY = y; + startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL); + result = super.onTouchEvent(event); + mChange = false; + break; + case MotionEvent.ACTION_MOVE: + int deltaY = mLastMotionY - y; + + if (dispatchNestedPreScroll(0, deltaY, mScrollConsumed, mScrollOffset)) { + deltaY -= mScrollConsumed[1]; + trackedEvent.offsetLocation(0, mScrollOffset[1]); + mNestedYOffset += mScrollOffset[1]; + } + + int oldY = getScrollY(); + mLastMotionY = y - mScrollOffset[1]; + int newScrollY = Math.max(0, oldY + deltaY); + deltaY -= newScrollY - oldY; + if (dispatchNestedScroll(0, newScrollY - deltaY, 0, deltaY, mScrollOffset)) { + mLastMotionY -= mScrollOffset[1]; + trackedEvent.offsetLocation(0, mScrollOffset[1]); + mNestedYOffset += mScrollOffset[1]; + } + if(mScrollConsumed[1]==0 && mScrollOffset[1]==0) { + if(mChange){ + mChange =false; + trackedEvent.setAction(MotionEvent.ACTION_DOWN); + super.onTouchEvent(trackedEvent); + }else { + result = super.onTouchEvent(trackedEvent); + } + trackedEvent.recycle(); + }else{ + if(Math.abs(mLastMotionY - y) >= 10) { + if (!mChange) { + mChange = true; + super.onTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0, 0, 0)); + } + } + + } + break; + case MotionEvent.ACTION_POINTER_DOWN: + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + stopNestedScroll(); + result = super.onTouchEvent(event); + break; + } + return result; + } + + // NestedScrollingChild + @Override + public void setNestedScrollingEnabled(boolean enabled) { + mChildHelper.setNestedScrollingEnabled(enabled); + } + + @Override + public boolean isNestedScrollingEnabled() { + return mChildHelper.isNestedScrollingEnabled(); + } + + @Override + public boolean startNestedScroll(int axes) { + return mChildHelper.startNestedScroll(axes); + } + + @Override + public void stopNestedScroll() { + mChildHelper.stopNestedScroll(); + } + + @Override + public boolean hasNestedScrollingParent() { + return mChildHelper.hasNestedScrollingParent(); + } + + @Override + public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow) { + return mChildHelper.dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, offsetInWindow); + } + + @Override + public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) { + return mChildHelper.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow); + } + + @Override + public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) { + return mChildHelper.dispatchNestedFling(velocityX, velocityY, consumed); + } + + @Override + public boolean dispatchNestedPreFling(float velocityX, float velocityY) { + return mChildHelper.dispatchNestedPreFling(velocityX, velocityY); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt index a1a4f1a521..3416dd1dd3 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -480,7 +480,6 @@ class GameDetailFragment : NormalFragment() { val webBundle = Bundle() webBundle.putString(EntranceUtils.KEY_URL, "${it.link}?timestamp=${System.currentTimeMillis()}") webBundle.putBoolean(WebFragment.KEY_OPEN_NATIVE_PAGE, true) - webBundle.putBoolean(WebFragment.KEY_IS_ZONE_PAGE, true) webFragment.arguments = webBundle fragmentsList.add(webFragment) } else { diff --git a/app/src/main/java/com/halo/assistant/fragment/WebFragment.java b/app/src/main/java/com/halo/assistant/fragment/WebFragment.java index 573e3585d1..35b5664bd9 100644 --- a/app/src/main/java/com/halo/assistant/fragment/WebFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/WebFragment.java @@ -76,7 +76,6 @@ public class WebFragment extends NormalFragment { public static final String KEY_BACK_CONFIRMATION_CONTENT = "back_confirmation_content"; public static final String KEY_OPEN_NATIVE_PAGE = "open_native_page"; public static final String KEY_GAME_NAME = "game_name"; - public static final String KEY_IS_ZONE_PAGE = "is_zone_page"; @BindView(R.id.news_webview) DWebView mWebView; @@ -111,8 +110,7 @@ public class WebFragment extends NormalFragment { @Override protected int getLayoutId() { - return getArguments().getBoolean(KEY_IS_ZONE_PAGE, false) ? - R.layout.fragment_scrollview_web : R.layout.fragment_web; + return R.layout.fragment_web; } @Override diff --git a/app/src/main/res/layout/fragment_scrollview_web.xml b/app/src/main/res/layout/fragment_scrollview_web.xml deleted file mode 100644 index 52ec8091ee..0000000000 --- a/app/src/main/res/layout/fragment_scrollview_web.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_web.xml b/app/src/main/res/layout/fragment_web.xml index bb86c7f3fd..fdb7882802 100644 --- a/app/src/main/res/layout/fragment_web.xml +++ b/app/src/main/res/layout/fragment_web.xml @@ -3,7 +3,7 @@ android:layout_width = "match_parent" android:layout_height = "match_parent" > -