/** * @param out Output movement area rectangle * @param state Current state * @deprecated User {@link #getMovementArea(State, RectF)} instead. */ @SuppressWarnings("unused") // Public API @Deprecated public void getEffectiveMovementArea(RectF out, State state) { getMovementArea(state, out); }
private float scrollBy(@NonNull MotionEvent event, float dx) { if (isSkipViewPager || isViewPagerDisabled) { return dx; } final State state = getState(); getStateController().getMovementArea(state, tmpRectF); float pagerDx = splitPagerScroll(dx, state, tmpRectF); pagerDx = skipPagerMovement(pagerDx, state, tmpRectF); float viewDx = dx - pagerDx; // Applying pager scroll boolean shouldFixViewX = isViewPagerInterceptedScroll && viewPagerX == 0; int actualX = performViewPagerScroll(event, pagerDx); viewPagerX += actualX; if (shouldFixViewX) { // Adding back scroll not handled by ViewPager viewDx += Math.round(pagerDx) - actualX; } // Returning altered scroll left for image return viewDx; }
protected boolean shouldDisallowInterceptTouch(MotionEvent event) { if (exitController.isExitDetected()) { return true; } switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_MOVE: { // If view can be panned then parent should not intercept touch events. // We should check it on DOWN event since parent may quickly take control over us // in case of a very fast MOVE action. stateController.getMovementArea(state, tmpRectF); final boolean isPannable = State.compare(tmpRectF.width(), 0f) > 0 || State.compare(tmpRectF.height(), 0f) > 0; if (settings.isPanEnabled() && (isPannable || !settings.isRestrictBounds())) { return true; } break; } case MotionEvent.ACTION_POINTER_DOWN: { // If view can be zoomed or rotated then parent should not intercept touch events. return settings.isZoomEnabled() || settings.isRotationEnabled(); } default: } return false; }
private boolean canScroll(float dy) { if (!controller.getSettings().isRestrictBounds()) { return true; } final State state = controller.getState(); controller.getStateController().getMovementArea(state, tmpArea); return (dy > 0f && State.compare(state.getY(), tmpArea.bottom) < 0f) || (dy < 0f && State.compare(state.getY(), tmpArea.top) > 0f); }