Now tap on edges of webtoon reader scrolls by 3/4 screen
This commit is contained in:
parent
486f129e62
commit
a3ec057384
4 changed files with 29 additions and 12 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Reference in a new issue