diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerReaderFragment.java b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerReaderFragment.java index 9330f20675..6c3c0b1723 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerReaderFragment.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerReaderFragment.java @@ -68,7 +68,7 @@ public class PagerReaderFragment extends BaseFragment { imageView.setMinimumScaleType(parentFragment.scaleType); imageView.setRegionDecoderClass(parentFragment.getRegionDecoderClass()); imageView.setBitmapDecoderClass(parentFragment.getBitmapDecoderClass()); - imageView.setVerticalScroll(parentFragment instanceof VerticalReader); + imageView.setVerticalScrollingParent(parentFragment instanceof VerticalReader); imageView.setOnTouchListener((v, motionEvent) -> parentFragment.onImageTouch(motionEvent)); imageView.setOnImageEventListener(new SubsamplingScaleImageView.DefaultOnImageEventListener() { @Override @@ -187,8 +187,8 @@ public class PagerReaderFragment extends BaseFragment { final AtomicInteger currentValue = new AtomicInteger(-1); - progressSubscription = Observable.interval(75, TimeUnit.MILLISECONDS, Schedulers.newThread()) - .onBackpressureDrop() + progressSubscription = Observable.interval(100, TimeUnit.MILLISECONDS, Schedulers.newThread()) + .onBackpressureLatest() .observeOn(AndroidSchedulers.mainThread()) .subscribe(tick -> { // Refresh UI only if progress change diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonHolder.java b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonHolder.java index f384d98ffb..51cc392363 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonHolder.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonHolder.java @@ -38,7 +38,7 @@ public class WebtoonHolder extends RecyclerView.ViewHolder { imageView.setMaxScale(10); imageView.setRegionDecoderClass(adapter.getReader().getRegionDecoderClass()); imageView.setBitmapDecoderClass(adapter.getReader().getBitmapDecoderClass()); - imageView.setVerticalScroll(true); + imageView.setVerticalScrollingParent(true); imageView.setOnTouchListener(touchListener); imageView.setOnImageEventListener(new SubsamplingScaleImageView.DefaultOnImageEventListener() { @Override diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonReader.java b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonReader.java index 4e09dee99c..1879d2fca3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonReader.java +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonReader.java @@ -29,11 +29,20 @@ public class WebtoonReader extends BaseReader { private Subscription decoderSubscription; private GestureDetector gestureDetector; + private int scrollDistance; + + private static final float LEFT_REGION = 0.33f; + private static final float RIGHT_REGION = 0.66f; + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) { adapter = new WebtoonAdapter(this); + + int screenHeight = getResources().getDisplayMetrics().heightPixels; + scrollDistance = screenHeight * 3 / 4; + layoutManager = new PreCachingLayoutManager(getActivity()); - layoutManager.setExtraLayoutSpace(getResources().getDisplayMetrics().heightPixels / 2); + layoutManager.setExtraLayoutSpace(screenHeight / 2); recycler = new RecyclerView(getActivity()); recycler.setLayoutParams(new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)); @@ -48,10 +57,18 @@ public class WebtoonReader extends BaseReader { .distinctUntilChanged() .subscribe(v -> recycler.setAdapter(adapter)); - gestureDetector = new GestureDetector(getActivity(), new SimpleOnGestureListener() { + gestureDetector = new GestureDetector(recycler.getContext(), new SimpleOnGestureListener() { @Override public boolean onSingleTapConfirmed(MotionEvent e) { - getReaderActivity().onCenterSingleTap(); + final float positionX = e.getX(); + + if (positionX < recycler.getWidth() * LEFT_REGION) { + recycler.smoothScrollBy(0, -scrollDistance); + } else if (positionX > recycler.getWidth() * RIGHT_REGION) { + recycler.smoothScrollBy(0, scrollDistance); + } else { + getReaderActivity().onCenterSingleTap(); + } return true; } }); diff --git a/libs/SubsamplingScaleImageView/src/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java b/libs/SubsamplingScaleImageView/src/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java index a4d559baa7..63fc1a682b 100644 --- a/libs/SubsamplingScaleImageView/src/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java +++ b/libs/SubsamplingScaleImageView/src/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java @@ -206,7 +206,7 @@ public class SubsamplingScaleImageView extends View { private int maxBitmapDimensions; // Vertical pagers/scrollers should enable this - private boolean isVerticalScroll; + private boolean isVerticalScrollingParent; // Is two-finger zooming in progress private boolean isZooming; @@ -758,7 +758,7 @@ public class SubsamplingScaleImageView extends View { float lastX = vTranslate.x; float lastY = vTranslate.y; fitToBounds(true); - if (!isVerticalScroll) { + if (!isVerticalScrollingParent) { boolean atXEdge = lastX != vTranslate.x; boolean edgeXSwipe = atXEdge && dx > dy && !isPanning; boolean yPan = lastY == vTranslate.y && dy > 15; @@ -779,7 +779,7 @@ public class SubsamplingScaleImageView extends View { if (!edgeYSwipe && (!atYEdge || xPan || isPanning)) { isPanning = true; } else if (dy > 5) { - // Haven't panned the image, and we're at the left or right edge. Switch to page swipe. + // Haven't panned the image, and we're at the top or bottom edge. Switch to page swipe. maxTouchCount = 0; handler.removeMessages(MESSAGE_LONG_CLICK); getParent().requestDisallowInterceptTouchEvent(false); @@ -2502,8 +2502,8 @@ public class SubsamplingScaleImageView extends View { /** * Set vertical scroll mode to fix gestures */ - public void setVerticalScroll(boolean isVerticalScroll) { - this.isVerticalScroll = isVerticalScroll; + public void setVerticalScrollingParent(boolean isVerticalScrollingParent) { + this.isVerticalScrollingParent = isVerticalScrollingParent; } /**