Search in sources :

Example 6 with Scroller

use of android.widget.Scroller in project android-app by eoecn.

the class CustomViewAbove method initCustomViewAbove.

void initCustomViewAbove() {
    //		setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
    setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS);
    setClickable(true);
    setFocusable(true);
    setWillNotDraw(false);
    final Context context = getContext();
    mScroller = new Scroller(context, sInterpolator);
    final ViewConfiguration configuration = ViewConfiguration.get(context);
    mTouchSlop = ViewConfigurationCompat.getScaledPagingTouchSlop(configuration);
    mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();
    mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
    setInternalPageChangeListener(new SimpleOnPageChangeListener() {

        public void onPageSelected(int position) {
            if (mViewBehind != null) {
                switch(position) {
                    case 0:
                    case 2:
                        mViewBehind.setChildrenEnabled(true);
                        break;
                    case 1:
                        mViewBehind.setChildrenEnabled(false);
                        break;
                }
            }
        }
    });
    final float density = context.getResources().getDisplayMetrics().density;
    mFlingDistance = (int) (MIN_DISTANCE_FOR_FLING * density);
}
Also used : Context(android.content.Context) ViewConfiguration(android.view.ViewConfiguration) Scroller(android.widget.Scroller)

Example 7 with Scroller

use of android.widget.Scroller in project android_frameworks_base by ParanoidAndroid.

the class ViewRootImpl method scrollToRectOrFocus.

boolean scrollToRectOrFocus(Rect rectangle, boolean immediate) {
    final View.AttachInfo attachInfo = mAttachInfo;
    final Rect ci = attachInfo.mContentInsets;
    final Rect vi = attachInfo.mVisibleInsets;
    int scrollY = 0;
    boolean handled = false;
    if (vi.left > ci.left || vi.top > ci.top || vi.right > ci.right || vi.bottom > ci.bottom) {
        // We'll assume that we aren't going to change the scroll
        // offset, since we want to avoid that unless it is actually
        // going to make the focus visible...  otherwise we scroll
        // all over the place.
        scrollY = mScrollY;
        // We can be called for two different situations: during a draw,
        // to update the scroll position if the focus has changed (in which
        // case 'rectangle' is null), or in response to a
        // requestChildRectangleOnScreen() call (in which case 'rectangle'
        // is non-null and we just want to scroll to whatever that
        // rectangle is).
        final View focus = mView.findFocus();
        if (focus == null) {
            return false;
        }
        View lastScrolledFocus = (mLastScrolledFocus != null) ? mLastScrolledFocus.get() : null;
        if (focus != lastScrolledFocus) {
            // If the focus has changed, then ignore any requests to scroll
            // to a rectangle; first we want to make sure the entire focus
            // view is visible.
            rectangle = null;
        }
        if (DEBUG_INPUT_RESIZE)
            Log.v(TAG, "Eval scroll: focus=" + focus + " rectangle=" + rectangle + " ci=" + ci + " vi=" + vi);
        if (focus == lastScrolledFocus && !mScrollMayChange && rectangle == null) {
            // as they are.
            if (DEBUG_INPUT_RESIZE)
                Log.v(TAG, "Keeping scroll y=" + mScrollY + " vi=" + vi.toShortString());
        } else {
            // We need to determine if the currently focused view is
            // within the visible part of the window and, if not, apply
            // a pan so it can be seen.
            mLastScrolledFocus = new WeakReference<View>(focus);
            mScrollMayChange = false;
            if (DEBUG_INPUT_RESIZE)
                Log.v(TAG, "Need to scroll?");
            // Try to find the rectangle from the focus view.
            if (focus.getGlobalVisibleRect(mVisRect, null)) {
                if (DEBUG_INPUT_RESIZE)
                    Log.v(TAG, "Root w=" + mView.getWidth() + " h=" + mView.getHeight() + " ci=" + ci.toShortString() + " vi=" + vi.toShortString());
                if (rectangle == null) {
                    focus.getFocusedRect(mTempRect);
                    if (DEBUG_INPUT_RESIZE)
                        Log.v(TAG, "Focus " + focus + ": focusRect=" + mTempRect.toShortString());
                    if (mView instanceof ViewGroup) {
                        ((ViewGroup) mView).offsetDescendantRectToMyCoords(focus, mTempRect);
                    }
                    if (DEBUG_INPUT_RESIZE)
                        Log.v(TAG, "Focus in window: focusRect=" + mTempRect.toShortString() + " visRect=" + mVisRect.toShortString());
                } else {
                    mTempRect.set(rectangle);
                    if (DEBUG_INPUT_RESIZE)
                        Log.v(TAG, "Request scroll to rect: " + mTempRect.toShortString() + " visRect=" + mVisRect.toShortString());
                }
                if (mTempRect.intersect(mVisRect)) {
                    if (DEBUG_INPUT_RESIZE)
                        Log.v(TAG, "Focus window visible rect: " + mTempRect.toShortString());
                    if (mTempRect.height() > (mView.getHeight() - vi.top - vi.bottom)) {
                        // best is probably just to leave things as-is.
                        if (DEBUG_INPUT_RESIZE)
                            Log.v(TAG, "Too tall; leaving scrollY=" + scrollY);
                    } else if ((mTempRect.top - scrollY) < vi.top) {
                        scrollY -= vi.top - (mTempRect.top - scrollY);
                        if (DEBUG_INPUT_RESIZE)
                            Log.v(TAG, "Top covered; scrollY=" + scrollY);
                    } else if ((mTempRect.bottom - scrollY) > (mView.getHeight() - vi.bottom)) {
                        scrollY += (mTempRect.bottom - scrollY) - (mView.getHeight() - vi.bottom);
                        if (DEBUG_INPUT_RESIZE)
                            Log.v(TAG, "Bottom covered; scrollY=" + scrollY);
                    }
                    handled = true;
                }
            }
        }
    }
    if (scrollY != mScrollY) {
        if (DEBUG_INPUT_RESIZE)
            Log.v(TAG, "Pan scroll changed: old=" + mScrollY + " , new=" + scrollY);
        if (!immediate && mResizeBuffer == null) {
            if (mScroller == null) {
                mScroller = new Scroller(mView.getContext());
            }
            mScroller.startScroll(0, mScrollY, 0, scrollY - mScrollY);
        } else if (mScroller != null) {
            mScroller.abortAnimation();
        }
        mScrollY = scrollY;
    }
    return handled;
}
Also used : Rect(android.graphics.Rect) Scroller(android.widget.Scroller) Paint(android.graphics.Paint) Point(android.graphics.Point) AttachInfo(android.view.View.AttachInfo)

Example 8 with Scroller

use of android.widget.Scroller in project android_frameworks_base by ParanoidAndroid.

the class WebViewClassic method init.

/**
     * See {@link WebViewProvider#init(Map, boolean)}
     */
@Override
public void init(Map<String, Object> javaScriptInterfaces, boolean privateBrowsing) {
    Context context = mContext;
    // Used by the chrome stack to find application paths
    JniUtil.setContext(context);
    mCallbackProxy = new CallbackProxy(context, this);
    mViewManager = new ViewManager(this);
    L10nUtils.setApplicationContext(context.getApplicationContext());
    mWebViewCore = new WebViewCore(context, this, mCallbackProxy, javaScriptInterfaces);
    mDatabase = WebViewDatabaseClassic.getInstance(context);
    //TODO Use OverScroller's flywheel
    mScroller = new OverScroller(context, null, 0, 0, false);
    mZoomManager = new ZoomManager(this, mCallbackProxy);
    /* The init method must follow the creation of certain member variables,
         * such as the mZoomManager.
         */
    init();
    setupPackageListener(context);
    setupProxyListener(context);
    setupTrustStorageListener(context);
    updateMultiTouchSupport(context);
    if (privateBrowsing) {
        startPrivateBrowsing();
    }
    mAutoFillData = new WebViewCore.AutoFillData();
    mEditTextScroller = new Scroller(context);
    // Calculate channel distance
    calculateChannelDistance(context);
}
Also used : Context(android.content.Context) OverScroller(android.widget.OverScroller) Scroller(android.widget.Scroller) OverScroller(android.widget.OverScroller)

Example 9 with Scroller

use of android.widget.Scroller in project android_frameworks_base by ParanoidAndroid.

the class PagedView method init.

/**
     * Initializes various states for this workspace.
     */
protected void init() {
    mDirtyPageContent = new ArrayList<Boolean>();
    mDirtyPageContent.ensureCapacity(32);
    mScroller = new Scroller(getContext(), new ScrollInterpolator());
    mCurrentPage = 0;
    final ViewConfiguration configuration = ViewConfiguration.get(getContext());
    mTouchSlop = configuration.getScaledTouchSlop();
    mPagingTouchSlop = configuration.getScaledPagingTouchSlop();
    mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
    mDensity = getResources().getDisplayMetrics().density;
    // Scale the fling-to-delete threshold by the density
    mFlingToDeleteThresholdVelocity = (int) (mFlingToDeleteThresholdVelocity * mDensity);
    mFlingThresholdVelocity = (int) (FLING_THRESHOLD_VELOCITY * mDensity);
    mMinFlingVelocity = (int) (MIN_FLING_VELOCITY * mDensity);
    mMinSnapVelocity = (int) (MIN_SNAP_VELOCITY * mDensity);
    setOnHierarchyChangeListener(this);
}
Also used : ViewConfiguration(android.view.ViewConfiguration) Scroller(android.widget.Scroller)

Example 10 with Scroller

use of android.widget.Scroller in project material-intro-screen by TangoAgency.

the class CustomViewPager method initViewPager.

void initViewPager() {
    setWillNotDraw(false);
    setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
    setFocusable(true);
    final Context context = getContext();
    mScroller = new Scroller(context, sInterpolator);
    final ViewConfiguration configuration = ViewConfiguration.get(context);
    final float density = context.getResources().getDisplayMetrics().density;
    mTouchSlop = configuration.getScaledPagingTouchSlop();
    mMinimumVelocity = (int) (MIN_FLING_VELOCITY * density);
    mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
    mLeftEdge = new EdgeEffectCompat(context);
    mRightEdge = new EdgeEffectCompat(context);
    mFlingDistance = (int) (MIN_DISTANCE_FOR_FLING * density);
    mCloseEnough = (int) (CLOSE_ENOUGH * density);
    mDefaultGutterSize = (int) (DEFAULT_GUTTER_SIZE * density);
    ViewCompat.setAccessibilityDelegate(this, new MyAccessibilityDelegate());
    if (ViewCompat.getImportantForAccessibility(this) == ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
        ViewCompat.setImportantForAccessibility(this, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
    }
    ViewCompat.setOnApplyWindowInsetsListener(this, new android.support.v4.view.OnApplyWindowInsetsListener() {

        private final Rect mTempRect = new Rect();

        @Override
        public WindowInsetsCompat onApplyWindowInsets(final View v, final WindowInsetsCompat originalInsets) {
            // First let the ViewPager itself try and consume them...
            final WindowInsetsCompat applied = ViewCompat.onApplyWindowInsets(v, originalInsets);
            if (applied.isConsumed()) {
                // If the ViewPager consumed all insets, return now
                return applied;
            }
            // Now we'll manually dispatch the insets to our children. Since ViewPager
            // children are always full-height, we do not want to use the standard
            // ViewGroup dispatchApplyWindowInsets since if child 0 consumes them,
            // the rest of the children will not receive any insets. To workaround this
            // we manually dispatch the applied insets, not allowing children to
            // consume them from each other. We do however keep track of any insets
            // which are consumed, returning the union of our children's consumption
            final Rect res = mTempRect;
            res.left = applied.getSystemWindowInsetLeft();
            res.top = applied.getSystemWindowInsetTop();
            res.right = applied.getSystemWindowInsetRight();
            res.bottom = applied.getSystemWindowInsetBottom();
            for (int i = 0, count = getChildCount(); i < count; i++) {
                final WindowInsetsCompat childInsets = ViewCompat.dispatchApplyWindowInsets(getChildAt(i), applied);
                // Now keep track of any consumed by tracking each dimension's min
                // value
                res.left = Math.min(childInsets.getSystemWindowInsetLeft(), res.left);
                res.top = Math.min(childInsets.getSystemWindowInsetTop(), res.top);
                res.right = Math.min(childInsets.getSystemWindowInsetRight(), res.right);
                res.bottom = Math.min(childInsets.getSystemWindowInsetBottom(), res.bottom);
            }
            // Now return a new WindowInsets, using the consumed window insets
            return applied.replaceSystemWindowInsets(res.left, res.top, res.right, res.bottom);
        }
    });
}
Also used : Context(android.content.Context) Rect(android.graphics.Rect) View(android.view.View) ViewConfiguration(android.view.ViewConfiguration) EdgeEffectCompat(android.support.v4.widget.EdgeEffectCompat) Scroller(android.widget.Scroller)

Aggregations

Scroller (android.widget.Scroller)87 ViewConfiguration (android.view.ViewConfiguration)40 Context (android.content.Context)29 Paint (android.graphics.Paint)14 EdgeEffectCompat (android.support.v4.widget.EdgeEffectCompat)14 GestureDetector (android.view.GestureDetector)13 Rect (android.graphics.Rect)12 Point (android.graphics.Point)8 DecelerateInterpolator (android.view.animation.DecelerateInterpolator)7 DisplayMetrics (android.util.DisplayMetrics)6 View (android.view.View)4 OnGlobalLayoutListener (android.view.ViewTreeObserver.OnGlobalLayoutListener)4 BounceInterpolator (android.view.animation.BounceInterpolator)4 Interpolator (android.view.animation.Interpolator)4 SuppressLint (android.annotation.SuppressLint)3 TypedArray (android.content.res.TypedArray)3 LinearInterpolator (android.view.animation.LinearInterpolator)3 ImageView (android.widget.ImageView)3 OverScroller (android.widget.OverScroller)3 Animator (com.nineoldandroids.animation.Animator)3