Java Code Examples for android.view.MotionEvent#obtain()

The following examples show how to use android.view.MotionEvent#obtain() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: VerticalViewPager.java    From actor-platform with GNU Affero General Public License v3.0 6 votes vote down vote up
/**
 * Start a fake drag of the pager.
 * <p>
 * <p>A fake drag can be useful if you want to synchronize the motion of the ViewPager
 * with the touch scrolling of another view, while still letting the ViewPager
 * control the snapping motion and fling behavior. (e.g. parallax-scrolling tabs.)
 * Call {@link #fakeDragBy(float)} to simulate the actual drag motion. Call
 * {@link #endFakeDrag()} to complete the fake drag and fling as necessary.
 * <p>
 * <p>During a fake drag the ViewPager will ignore all touch events. If a real drag
 * is already in progress, this method will return false.
 *
 * @return true if the fake drag began successfully, false if it could not be started.
 * @see #fakeDragBy(float)
 * @see #endFakeDrag()
 */
public boolean beginFakeDrag() {
    if (mIsBeingDragged) {
        return false;
    }
    mFakeDragging = true;
    setScrollState(SCROLL_STATE_DRAGGING);
    mInitialMotionY = mLastMotionY = 0;
    if (mVelocityTracker == null) {
        mVelocityTracker = VelocityTracker.obtain();
    } else {
        mVelocityTracker.clear();
    }
    final long time = SystemClock.uptimeMillis();
    final MotionEvent ev = MotionEvent.obtain(time, time, MotionEvent.ACTION_DOWN, 0, 0, 0);
    mVelocityTracker.addMovement(ev);
    ev.recycle();
    mFakeDragBeginTime = time;
    return true;
}
 
Example 2
Source File: MoveGestureDetector.java    From MoeGallery with GNU General Public License v3.0 6 votes vote down vote up
@Override
protected void handleStartProgressEvent(int actionCode, MotionEvent event){
    switch (actionCode) { 
        case MotionEvent.ACTION_DOWN: 
            resetState(); // In case we missed an UP/CANCEL event
            
            mPrevEvent = MotionEvent.obtain(event);
            mTimeDelta = 0;

            updateStateByEvent(event);
            break;
        
        case MotionEvent.ACTION_MOVE:
            mGestureInProgress = mListener.onMoveBegin(this);
            break;
    }
}
 
Example 3
Source File: SdkCenteredViewPager.java    From Android-SDK-Demo with MIT License 6 votes vote down vote up
/**
 * Start a fake drag of the pager.
 * <p/>
 * <p>
 * A fake drag can be useful if you want to synchronize the motion of the ViewPager with the touch scrolling of another view, while still letting the ViewPager control the snapping motion and fling behavior. (e.g. parallax-scrolling tabs.) Call {@link #fakeDragBy(float)} to simulate the actual
 * drag motion. Call {@link #endFakeDrag()} to complete the fake drag and fling as necessary.
 * <p/>
 * <p>
 * During a fake drag the ViewPager will ignore all touch events. If a real drag is already in progress, this method will return false.
 *
 * @return true if the fake drag began successfully, false if it could not be started.
 * @see #fakeDragBy(float)
 * @see #endFakeDrag()
 */
public boolean beginFakeDrag()
{
    if ( mIsBeingDragged )
    {
        return false;
    }
    mFakeDragging = true;
    setScrollState( SCROLL_STATE_DRAGGING );
    mInitialMotionX = mLastMotionX = 0;
    if ( mVelocityTracker == null )
    {
        mVelocityTracker = VelocityTracker.obtain();
    }
    else
    {
        mVelocityTracker.clear();
    }
    final long time = SystemClock.uptimeMillis();
    final MotionEvent ev = MotionEvent.obtain( time, time, MotionEvent.ACTION_DOWN, 0, 0, 0 );
    mVelocityTracker.addMovement( ev );
    ev.recycle();
    mFakeDragBeginTime = time;
    return true;
}
 
Example 4
Source File: StickyNestedScrollView.java    From SwipeRecyclerView with Apache License 2.0 6 votes vote down vote up
@Override
public boolean onTouchEvent(MotionEvent ev) {
    if (redirectTouchesToStickyView) {
        ev.offsetLocation(0,
            ((getScrollY() + stickyViewTopOffset) - getTopForViewRelativeOnlyChild(currentlyStickingView)));
    }
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        hasNotDoneActionDown = false;
    }
    if (hasNotDoneActionDown) {
        MotionEvent down = MotionEvent.obtain(ev);
        down.setAction(MotionEvent.ACTION_DOWN);
        super.onTouchEvent(down);
        hasNotDoneActionDown = false;
    }
    if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) {
        hasNotDoneActionDown = true;
    }
    return super.onTouchEvent(ev);
}
 
Example 5
Source File: ListPopupWindow.java    From MDPreference with Apache License 2.0 6 votes vote down vote up
private void onLongPress() {
    clearCallbacks();

    final View src = mSrc;
    if (!src.isEnabled()) {
        return;
    }

    if (!onForwardingStarted()) {
        return;
    }

    // Don't let the parent intercept our events.
    mSrc.getParent().requestDisallowInterceptTouchEvent(true);

    // Make sure we cancel any ongoing source event stream.
    final long now = SystemClock.uptimeMillis();
    final MotionEvent e = MotionEvent.obtain(now, now, MotionEvent.ACTION_CANCEL, 0, 0, 0);
    mSrc.onTouchEvent(e);
    e.recycle();

    mForwarding = true;
    mWasLongPress = true;
}
 
Example 6
Source File: StickyScrollView.java    From Expert-Android-Programming with MIT License 6 votes vote down vote up
@Override
public boolean onTouchEvent(MotionEvent ev) {
	if(redirectTouchesToStickyView){
		ev.offsetLocation(0, ((getScrollY() + stickyViewTopOffset) - getTopForViewRelativeOnlyChild(currentlyStickingView)));
	} 
	
	if(ev.getAction()==MotionEvent.ACTION_DOWN){
		hasNotDoneActionDown = false;
	}
	
	if(hasNotDoneActionDown){
		MotionEvent down = MotionEvent.obtain(ev);
		down.setAction(MotionEvent.ACTION_DOWN);
		super.onTouchEvent(down);
		hasNotDoneActionDown = false;
	}
	
	if(ev.getAction()==MotionEvent.ACTION_UP || ev.getAction()==MotionEvent.ACTION_CANCEL){
		hasNotDoneActionDown = true;
	}
	
	return super.onTouchEvent(ev);
}
 
Example 7
Source File: SharedLinkCell.java    From Telegram with GNU General Public License v2.0 5 votes vote down vote up
public void run() {
    if (checkingForLongPress && getParent() != null && currentPressCount == pressCount) {
        checkingForLongPress = false;
        performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
        if (pressedLink >= 0) {
            delegate.onLinkPress(links.get(pressedLink), true);
        }
        MotionEvent event = MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0, 0, 0);
        onTouchEvent(event);
        event.recycle();
    }
}
 
Example 8
Source File: InteractionController.java    From JsDroidCmd with Mozilla Public License 2.0 5 votes vote down vote up
private boolean touchMove(int x, int y) {
	final long eventTime = SystemClock.uptimeMillis();
	MotionEvent event = MotionEvent.obtain(mDownTime, eventTime,
			MotionEvent.ACTION_MOVE, x, y, 1.0f, 1.0f, 0, 1.0f, 1.0f,
			eventId, 0);

	event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
	return injectEventSync(event);
}
 
Example 9
Source File: SwipeDismissListViewTouchListener.java    From ALLGO with Apache License 2.0 5 votes vote down vote up
private boolean handleMoveEvent(MotionEvent motionEvent) {
	if (mPaused || (mVelocityTracker == null)) {
		return false;
	}

	mVelocityTracker.addMovement(motionEvent);
	float deltaX = motionEvent.getRawX() - mDownX;
	float deltaY = motionEvent.getRawY() - mDownY;
	if (mTouchChildTouched && !mDisallowSwipe && Math.abs(deltaX) > mSlop && Math.abs(deltaX) > Math.abs(deltaY)) {
		mSwiping = true;
		mListView.requestDisallowInterceptTouchEvent(true);

		// Cancel ListView's touch (un-highlighting the item)
		MotionEvent cancelEvent = MotionEvent.obtain(motionEvent);
		cancelEvent.setAction(MotionEvent.ACTION_CANCEL | (motionEvent.getActionIndex() << MotionEvent.ACTION_POINTER_INDEX_SHIFT));
		mListView.onTouchEvent(cancelEvent);
	}

	if (mSwiping) {
		if (!mSwipeInitiated) {
			Log.d("SwipeDismissListViewTouchListener", "swipe/begin");
		}
		mSwipeInitiated = true;
		ViewHelper.setTranslationX(mCurrentDismissData.view, deltaX);
		ViewHelper.setAlpha(mCurrentDismissData.view, Math.max(0f, Math.min(1f, 1f - 2f * Math.abs(deltaX) / mViewWidth)));
		return true;
	}
	return false;
}
 
Example 10
Source File: SmoothRefreshLayout.java    From SmoothRefreshLayout with MIT License 5 votes vote down vote up
protected void sendDownEvent(MotionEvent event) {
    if (mHasSendDownEvent || (event == null && mLastMoveEvent == null)) {
        return;
    }
    if (sDebug) {
        Log.d(TAG, "sendDownEvent()");
    }
    final MotionEvent last = event == null ? mLastMoveEvent : event;
    final long now = SystemClock.uptimeMillis();
    final float[] rawOffsets = mIndicator.getRawOffsets();
    final MotionEvent downEv =
            MotionEvent.obtain(
                    now,
                    now,
                    MotionEvent.ACTION_DOWN,
                    last.getX() - rawOffsets[0],
                    last.getY() - rawOffsets[1],
                    0);
    downEv.setSource(InputDevice.SOURCE_TOUCHSCREEN);
    super.dispatchTouchEvent(downEv);
    downEv.recycle();
    final MotionEvent moveEv =
            MotionEvent.obtain(now, now, MotionEvent.ACTION_MOVE, last.getX(), last.getY(), 0);
    moveEv.setSource(InputDevice.SOURCE_TOUCHSCREEN);
    mHasSendCancelEvent = false;
    mHasSendDownEvent = true;
    super.dispatchTouchEvent(moveEv);
    moveEv.recycle();
}
 
Example 11
Source File: Purity.java    From cordova-amazon-fireos with Apache License 2.0 5 votes vote down vote up
public void touchMove(int x, int y)
{
    if(!fingerDown)
        touchStart(x,y);
    else
    {
        int realX = getRealCoord(x);
        int realY = getRealCoord(y);
        long downTime = SystemClock.uptimeMillis();
        // event time MUST be retrieved only by this way!
        long eventTime = SystemClock.uptimeMillis();
        MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, realX, realY, 0);
        inst.sendPointerSync(event);
    }
}
 
Example 12
Source File: RotateGestureDetector.java    From MoeGallery with GNU General Public License v3.0 5 votes vote down vote up
@Override
protected void handleInProgressEvent(int actionCode, MotionEvent event){ 	
    switch (actionCode) {
        case MotionEvent.ACTION_POINTER_UP:
            // Gesture ended but 
            updateStateByEvent(event);

            if (!mSloppyGesture) {
                mListener.onRotateEnd(this);
            }

            resetState();
            break;

        case MotionEvent.ACTION_CANCEL:
            if (!mSloppyGesture) {
                mListener.onRotateEnd(this);
            }

            resetState();
            break;

        case MotionEvent.ACTION_MOVE:
            updateStateByEvent(event);

// Only accept the event if our relative pressure is within
// a certain limit. This can help filter shaky data as a
// finger is lifted.
            if (mCurrPressure / mPrevPressure > PRESSURE_THRESHOLD) {
                final boolean updatePrevious = mListener.onRotate(this);
                if (updatePrevious) {
                    mPrevEvent.recycle();
                    mPrevEvent = MotionEvent.obtain(event);
                }
            }
            break;
    }
}
 
Example 13
Source File: TwinklingRefreshLayout.java    From TwinklingRefreshLayout with Apache License 2.0 4 votes vote down vote up
private boolean detectNestedScroll(MotionEvent e) {
    final MotionEvent vtev = MotionEvent.obtain(e);
    final int action = MotionEventCompat.getActionMasked(e);
    final int actionIndex = MotionEventCompat.getActionIndex(e);

    if (action == MotionEvent.ACTION_DOWN) {
        mNestedOffsets[0] = mNestedOffsets[1] = 0;
    }
    vtev.offsetLocation(mNestedOffsets[0], mNestedOffsets[1]);

    switch (action) {
        case MotionEvent.ACTION_DOWN:
            mActivePointerId = e.getPointerId(0);
            mLastTouchX = (int) e.getX();
            mLastTouchY = (int) e.getY();
            startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);
            break;
        case MotionEventCompat.ACTION_POINTER_DOWN:
            mActivePointerId = e.getPointerId(actionIndex);
            mLastTouchX = (int) e.getX(actionIndex);
            mLastTouchY = (int) e.getY(actionIndex);
            break;
        case MotionEvent.ACTION_MOVE:
            final int index = e.findPointerIndex(mActivePointerId);
            if (index < 0) {
                Log.e("TwinklingRefreshLayout", "Error processing scroll; pointer index for id " +
                        mActivePointerId + " not found. Did any MotionEvents get skipped?");
                return false;
            }

            final int x = (int) e.getX(index);
            final int y = (int) e.getY(index);

            int dx = mLastTouchX - x;
            int dy = mLastTouchY - y;

            if (dispatchNestedPreScroll(dx, dy, mScrollConsumed, mScrollOffset)) {
                dx -= mScrollConsumed[0];
                dy -= mScrollConsumed[1];
                vtev.offsetLocation(mScrollOffset[0], mScrollOffset[1]);
                // Updated the nested offsets
                mNestedOffsets[0] += mScrollOffset[0];
                mNestedOffsets[1] += mScrollOffset[1];
            }

            if (!mIsBeingDragged && Math.abs(dy) > mTouchSlop) {
                final ViewParent parent = getParent();
                if (parent != null) {
                    parent.requestDisallowInterceptTouchEvent(true);
                }
                mIsBeingDragged = true;
                if (dy > 0) {
                    dy -= mTouchSlop;
                } else {
                    dy += mTouchSlop;
                }
            }

            if (mIsBeingDragged) {
                mLastTouchY = y - mScrollOffset[1];

                final int scrolledDeltaY = 0;
                final int unconsumedY = dy - scrolledDeltaY;
                if (dispatchNestedScroll(0, scrolledDeltaY, 0, unconsumedY, mScrollOffset)) {
                    mLastTouchX -= mScrollOffset[0];
                    mLastTouchY -= mScrollOffset[1];
                    vtev.offsetLocation(mScrollOffset[0], mScrollOffset[1]);
                    mNestedOffsets[0] += mScrollOffset[0];
                    mNestedOffsets[1] += mScrollOffset[1];
                }
            }
            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            stopNestedScroll();
            mIsBeingDragged = false;
            mActivePointerId = INVALID_POINTER;
            break;
    }
    vtev.recycle();
    return true;
}
 
Example 14
Source File: ViewPagerEx.java    From UltimateAndroid with Apache License 2.0 4 votes vote down vote up
/**
 * Fake drag by an offset in pixels. You must have called {@link #beginFakeDrag()} first.
 *
 * @param xOffset Offset in pixels to drag by.
 * @see #beginFakeDrag()
 * @see #endFakeDrag()
 */
public void fakeDragBy(float xOffset) {
    if (!mFakeDragging) {
        throw new IllegalStateException("No fake drag in progress. Call beginFakeDrag first.");
    }

    mLastMotionX += xOffset;

    float oldScrollX = getScrollX();
    float scrollX = oldScrollX - xOffset;
    final int width = getClientWidth();

    float leftBound = width * mFirstOffset;
    float rightBound = width * mLastOffset;

    final ItemInfo firstItem = mItems.get(0);
    final ItemInfo lastItem = mItems.get(mItems.size() - 1);
    if (firstItem.position != 0) {
        leftBound = firstItem.offset * width;
    }
    if (lastItem.position != mAdapter.getCount() - 1) {
        rightBound = lastItem.offset * width;
    }

    if (scrollX < leftBound) {
        scrollX = leftBound;
    } else if (scrollX > rightBound) {
        scrollX = rightBound;
    }
    // Don't lose the rounded component
    mLastMotionX += scrollX - (int) scrollX;
    scrollTo((int) scrollX, getScrollY());
    pageScrolled((int) scrollX);

    // Synthesize an event for the VelocityTracker.
    final long time = SystemClock.uptimeMillis();
    final MotionEvent ev = MotionEvent.obtain(mFakeDragBeginTime, time, MotionEvent.ACTION_MOVE,
            mLastMotionX, 0, 0);
    mVelocityTracker.addMovement(ev);
    ev.recycle();
}
 
Example 15
Source File: VelocityViewPager.java    From Rey-MusicPlayer with Apache License 2.0 4 votes vote down vote up
/**
 * Fake drawable_drag by an offset in pixels. You must have called {@link #beginFakeDrag()} first.
 *
 * @param xOffset Offset in pixels to drawable_drag by.
 * @see #beginFakeDrag()
 * @see #endFakeDrag()
 */
public void fakeDragBy(float xOffset) {
    if (!mFakeDragging) {
        throw new IllegalStateException("No fake drawable_drag in progress. Call beginFakeDrag first.");
    }

    mLastMotionX += xOffset;

    float oldScrollX = getScrollX();
    float scrollX = oldScrollX - xOffset;
    final int width = getClientWidth();

    float leftBound = width * mFirstOffset;
    float rightBound = width * mLastOffset;

    final ItemInfo firstItem = mItems.get(0);
    final ItemInfo lastItem = mItems.get(mItems.size() - 1);
    if (firstItem.position != 0) {
        leftBound = firstItem.offset * width;
    }
    if (lastItem.position != mAdapter.getCount() - 1) {
        rightBound = lastItem.offset * width;
    }

    if (scrollX < leftBound) {
        scrollX = leftBound;
    } else if (scrollX > rightBound) {
        scrollX = rightBound;
    }
    // Don't lose the rounded component
    mLastMotionX += scrollX - (int) scrollX;
    scrollTo((int) scrollX, getScrollY());
    pageScrolled((int) scrollX);

    // Synthesize an event for the VelocityTracker.
    final long time = SystemClock.uptimeMillis();
    final MotionEvent ev = MotionEvent.obtain(mFakeDragBeginTime, time, MotionEvent.ACTION_MOVE,
            mLastMotionX, 0, 0);
    mVelocityTracker.addMovement(ev);
    ev.recycle();
}
 
Example 16
Source File: CoordinatorLayout.java    From ticdesign with Apache License 2.0 4 votes vote down vote up
@Override
public boolean onTouchEvent(MotionEvent ev) {
    boolean handled = false;
    boolean cancelSuper = false;
    MotionEvent cancelEvent = null;

    final int action = MotionEventCompat.getActionMasked(ev);

    if (mBehaviorTouchView != null || (cancelSuper = performIntercept(ev, TYPE_ON_TOUCH))) {
        // Safe since performIntercept guarantees that
        // mBehaviorTouchView != null if it returns true
        final LayoutParams lp = (LayoutParams) mBehaviorTouchView.getLayoutParams();
        final Behavior b = lp.getBehavior();
        if (b != null) {
            handled = b.onTouchEvent(this, mBehaviorTouchView, ev);
        }
    }

    // Keep the super implementation correct
    if (mBehaviorTouchView == null) {
        handled |= super.onTouchEvent(ev);
    } else if (cancelSuper) {
        if (cancelEvent == null) {
            final long now = SystemClock.uptimeMillis();
            cancelEvent = MotionEvent.obtain(now, now,
                    MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
        }
        super.onTouchEvent(cancelEvent);
    }

    if (!handled && action == MotionEvent.ACTION_DOWN) {

    }

    if (cancelEvent != null) {
        cancelEvent.recycle();
    }

    if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
        resetTouchBehaviors();
    }

    return handled;
}
 
Example 17
Source File: CoolViewPager.java    From CoolViewPager with Apache License 2.0 4 votes vote down vote up
/**
 * Fake drag by an offset in pixels. You must have called {@link #beginFakeDrag()} first.
 *
 * @param xOffset Offset in pixels to drag by.
 * @see #beginFakeDrag()
 * @see #endFakeDrag()
 */
public void fakeDragBy(float xOffset) {
    if (!mFakeDragging) {
        throw new IllegalStateException("No fake drag in progress. Call beginFakeDrag first.");
    }

    if (mAdapter == null) {
        return;
    }

    mLastMotionX += xOffset;

    float oldScrollX = getScrollX();
    float scrollX = oldScrollX - xOffset;
    final int width = getClientWidth();

    float leftBound = width * mFirstOffset;
    float rightBound = width * mLastOffset;

    final CoolViewPager.ItemInfo firstItem = mItems.get(0);
    final CoolViewPager.ItemInfo lastItem = mItems.get(mItems.size() - 1);
    if (firstItem.position != 0) {
        leftBound = firstItem.offset * width;
    }
    if (lastItem.position != mAdapter.getCount() - 1) {
        rightBound = lastItem.offset * width;
    }

    if (scrollX < leftBound) {
        scrollX = leftBound;
    } else if (scrollX > rightBound) {
        scrollX = rightBound;
    }
    // Don't lose the rounded component
    mLastMotionX += scrollX - (int) scrollX;
    scrollTo((int) scrollX, getScrollY());
    pageScrolled((int) scrollX);

    // Synthesize an event for the VelocityTracker.
    final long time = SystemClock.uptimeMillis();
    final MotionEvent ev = MotionEvent.obtain(mFakeDragBeginTime, time, MotionEvent.ACTION_MOVE,
            mLastMotionX, 0, 0);
    mVelocityTracker.addMovement(ev);
    ev.recycle();
}
 
Example 18
Source File: VerticalViewPager.java    From InfiniteCycleViewPager with Apache License 2.0 4 votes vote down vote up
/**
 * Fake drag by an offset in pixels. You must have called {@link #beginFakeDrag()} first.
 *
 * @param yOffset Offset in pixels to drag by.
 * @see #beginFakeDrag()
 * @see #endFakeDrag()
 */
public void fakeDragBy(float yOffset) {
    if (!mFakeDragging) {
        throw new IllegalStateException("No fake drag in progress. Call beginFakeDrag first.");
    }

    mLastMotionY += yOffset;

    float oldScrollY = getScrollY();
    float scrollY = oldScrollY - yOffset;
    final int height = getClientHeight();

    float topBound = height * mFirstOffset;
    float bottomBound = height * mLastOffset;

    final ItemInfo firstItem = mItems.get(0);
    final ItemInfo lastItem = mItems.get(mItems.size() - 1);
    if (firstItem.position != 0) {
        topBound = firstItem.offset * height;
    }
    if (lastItem.position != mAdapter.getCount() - 1) {
        bottomBound = lastItem.offset * height;
    }

    if (scrollY < topBound) {
        scrollY = topBound;
    } else if (scrollY > bottomBound) {
        scrollY = bottomBound;
    }
    // Don't lose the rounded component
    mLastMotionY += scrollY - (int) scrollY;
    scrollTo(getScrollX(), (int) scrollY);
    pageScrolled((int) scrollY);

    // Synthesize an event for the VelocityTracker.
    final long time = SystemClock.uptimeMillis();
    final MotionEvent ev = MotionEvent.obtain(mFakeDragBeginTime, time, MotionEvent.ACTION_MOVE,
            0, mLastMotionY, 0);
    mVelocityTracker.addMovement(ev);
    ev.recycle();
}
 
Example 19
Source File: VerticalViewPager.java    From ankihelper with GNU General Public License v3.0 4 votes vote down vote up
/**
 * Fake drag by an offset in pixels. You must have called {@link #beginFakeDrag()} first.
 *
 * @param yOffset Offset in pixels to drag by.
 * @see #beginFakeDrag()
 * @see #endFakeDrag()
 */
public void fakeDragBy(float yOffset) {
    if (!mFakeDragging) {
        throw new IllegalStateException("No fake drag in progress. Call beginFakeDrag first.");
    }


    mLastMotionY += yOffset;

    float oldScrollY = getScrollY();
    float scrollY = oldScrollY - yOffset;
    final int height = getClientHeight();

    float topBound = height * mFirstOffset;
    float bottomBound = height * mLastOffset;

    final ItemInfo firstItem = mItems.get(0);
    final ItemInfo lastItem = mItems.get(mItems.size() - 1);
    if (firstItem.position != 0) {
        topBound = firstItem.offset * height;
    }
    if (lastItem.position != mAdapter.getCount() - 1) {
        bottomBound = lastItem.offset * height;
    }

    if (scrollY < topBound) {
        scrollY = topBound;
    } else if (scrollY > bottomBound) {
        scrollY = bottomBound;
    }
    // Don't lose the rounded component
    mLastMotionY += scrollY - (int) scrollY;
    scrollTo(getScrollX(), (int) scrollY);
    pageScrolled((int) scrollY);

    // Synthesize an event for the VelocityTracker.
    final long time = SystemClock.uptimeMillis();
    final MotionEvent ev = MotionEvent.obtain(mFakeDragBeginTime, time, MotionEvent.ACTION_MOVE,
            0, mLastMotionY, 0);
    mVelocityTracker.addMovement(ev);
    ev.recycle();
}
 
Example 20
Source File: ListBuddiesLayout.java    From ListBuddies with Apache License 2.0 4 votes vote down vote up
private void forceScroll() {
    MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_MOVE, 570, -1, 0);
    mScrollHelper.onTouch(mListViewLeft, event);
}