Now tap on edges of webtoon reader scrolls by 3/4 screen
This commit is contained in:
		
							parent
							
								
									486f129e62
								
							
						
					
					
						commit
						a3ec057384
					
				| @ -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; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 inorichi
						inorichi