android.view.MotionEvent#obtainNoHistory ( )源码实例Demo

下面列出了android.view.MotionEvent#obtainNoHistory ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: droidddle   文件: TouchInterceptionFrameLayout.java
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (mTouchInterceptionListener == null) {
        return super.onInterceptTouchEvent(ev);
    }
    switch (ev.getActionMasked()) {
        case MotionEvent.ACTION_DOWN:
            mInitialY = ev.getY();
            mPendingDownMotionEvent = MotionEvent.obtainNoHistory(ev);
            mBeganFromDownMotionEvent = true;
            mDownMotionEventPended = true;
            mIntercepting = mTouchInterceptionListener.shouldInterceptTouchEvent(ev, false, 0);
            return mIntercepting;
    }
    return super.onInterceptTouchEvent(ev);
}
 
源代码2 项目: HeadsUp   文件: HeadsUpNotificationView.java
/**
 * {@inheritDoc}
 */
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
    // Do not let notification to be timed-out while
    // we are touching it.
    handleTimeout(event);

    // Translate touch event too to correspond with
    // view's translation changes and prevent lags
    // while swiping.
    final MotionEvent ev = MotionEvent.obtainNoHistory(event);
    ev.offsetLocation(getTranslationX(), getTranslationY());
    boolean handled = mSwipeHelperX.onTouchEvent(ev);
    ev.recycle();

    return handled || super.onTouchEvent(event);
}
 
源代码3 项目: android_9.0.0_r45   文件: WallpaperService.java
@Override
public void onInputEvent(InputEvent event, int displayId) {
    boolean handled = false;
    try {
        if (event instanceof MotionEvent
                && (event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
            MotionEvent dup = MotionEvent.obtainNoHistory((MotionEvent)event);
            dispatchPointer(dup);
            handled = true;
        }
    } finally {
        finishInputEvent(event, handled);
    }
}
 
源代码4 项目: android_9.0.0_r45   文件: ForwardingListener.java
/**
 * Handles forwarded motion events and determines when to stop
 * forwarding.
 *
 * @param srcEvent motion event in source view coordinates
 * @return true to continue forwarding motion events, false to cancel
 */
private boolean onTouchForwarded(MotionEvent srcEvent) {
    final View src = mSrc;
    final ShowableListMenu popup = getPopup();
    if (popup == null || !popup.isShowing()) {
        return false;
    }

    final DropDownListView dst = (DropDownListView) popup.getListView();
    if (dst == null || !dst.isShown()) {
        return false;
    }

    // Convert event to destination-local coordinates.
    final MotionEvent dstEvent = MotionEvent.obtainNoHistory(srcEvent);
    src.toGlobalMotionEvent(dstEvent);
    dst.toLocalMotionEvent(dstEvent);

    // Forward converted event to destination view, then recycle it.
    final boolean handled = dst.onForwardedEvent(dstEvent, mActivePointerId);
    dstEvent.recycle();

    // Always cancel forwarding when the touch stream ends.
    final int action = srcEvent.getActionMasked();
    final boolean keepForwarding = action != MotionEvent.ACTION_UP
            && action != MotionEvent.ACTION_CANCEL;

    return handled && keepForwarding;
}
 
源代码5 项目: MDPreference   文件: ListPopupWindow.java
/**
 * Handled forwarded motion events and determines when to stop forwarding.
 *
 * @param srcEvent motion event in source view coordinates
 * @return true to continue forwarding motion events, false to cancel
 */
private boolean onTouchForwarded(MotionEvent srcEvent) {
    final View src = mSrc;
    final ListPopupWindow popup = getPopup();
    if (popup == null || !popup.isShowing()) {
        return false;
    }

    final DropDownListView dst = popup.mDropDownList;
    if (dst == null || !dst.isShown()) {
        return false;
    }

    // Convert event to destination-local coordinates.
    final MotionEvent dstEvent = MotionEvent.obtainNoHistory(srcEvent);
    toGlobalMotionEvent(src, dstEvent);
    toLocalMotionEvent(dst, dstEvent);

    // Forward converted event to destination view, then recycle it.
    final boolean handled = dst.onForwardedEvent(dstEvent, mActivePointerId);
    dstEvent.recycle();

    // Always cancel forwarding when the touch stream ends.
    final int action = MotionEventCompat.getActionMasked(srcEvent);
    final boolean keepForwarding = action != MotionEvent.ACTION_UP
            && action != MotionEvent.ACTION_CANCEL;

    return handled && keepForwarding;
}
 
/**
 * Duplicate touch events to child views.
 * We want to dispatch a down motion event and the move events to
 * child views, but calling dispatchTouchEvent() causes StackOverflowError.
 * Therefore we do it manually.
 *
 * @param ev            motion event to be passed to children
 * @param pendingEvents pending events like ACTION_DOWN. This will be passed to the children before ev
 */
private void duplicateTouchEventForChildren(MotionEvent ev, MotionEvent... pendingEvents) {
    if (ev == null) {
        return;
    }
    for (int i = getChildCount() - 1; 0 <= i; i--) {
        View childView = getChildAt(i);
        if (childView != null) {
            Rect childRect = new Rect();
            childView.getHitRect(childRect);
            MotionEvent event = MotionEvent.obtainNoHistory(ev);
            if (!childRect.contains((int) event.getX(), (int) event.getY())) {
                continue;
            }
            float offsetX = -childView.getLeft();
            float offsetY = -childView.getTop();
            boolean consumed = false;
            if (pendingEvents != null) {
                for (MotionEvent pe : pendingEvents) {
                    if (pe != null) {
                        MotionEvent peAdjusted = MotionEvent.obtainNoHistory(pe);
                        peAdjusted.offsetLocation(offsetX, offsetY);
                        consumed |= childView.dispatchTouchEvent(peAdjusted);
                    }
                }
            }
            event.offsetLocation(offsetX, offsetY);
            consumed |= childView.dispatchTouchEvent(event);
            if (consumed) {
                break;
            }
        }
    }
}
 
源代码7 项目: material   文件: ListPopupWindow.java
/**
 * Handled forwarded motion events and determines when to stop forwarding.
 *
 * @param srcEvent motion event in source view coordinates
 * @return true to continue forwarding motion events, false to cancel
 */
private boolean onTouchForwarded(MotionEvent srcEvent) {
    final View src = mSrc;
    final ListPopupWindow popup = getPopup();
    if (popup == null || !popup.isShowing()) {
        return false;
    }

    final DropDownListView dst = popup.mDropDownList;
    if (dst == null || !dst.isShown()) {
        return false;
    }

    // Convert event to destination-local coordinates.
    final MotionEvent dstEvent = MotionEvent.obtainNoHistory(srcEvent);
    toGlobalMotionEvent(src, dstEvent);
    toLocalMotionEvent(dst, dstEvent);

    // Forward converted event to destination view, then recycle it.
    final boolean handled = dst.onForwardedEvent(dstEvent, mActivePointerId);
    dstEvent.recycle();

    // Always cancel forwarding when the touch stream ends.
    final int action = MotionEventCompat.getActionMasked(srcEvent);
    final boolean keepForwarding = action != MotionEvent.ACTION_UP
            && action != MotionEvent.ACTION_CANCEL;

    return handled && keepForwarding;
}
 
源代码8 项目: AcDisplay   文件: AcDisplayFragment.java
private void populateStdMotion(@NonNull MotionEvent srcEvent) {
    // Track current movement to be able to handle
    // flings correctly.
    MotionEvent dstEvent = MotionEvent.obtainNoHistory(srcEvent);
    mVelocityTracker.addMovement(MotionEvent.obtainNoHistory(srcEvent));
    dstEvent.recycle();

    // No need to handle swipe-to-dismiss if the
    // widget is not dismissible.
    if (!isDismissible(mSelectedWidget)) {
        return;
    }

    final float y = srcEvent.getY() - mIconsContainer.getHeight();

    if (y <= 0) {
        if (mSceneContainer.getTranslationY() != 0) {
            resetSceneContainerParams();
        }
        return;
    }

    // Populate current animation
    float height = getSceneView().getHeight();
    float progress = MathUtils.range(y / height, 0f, 1f);
    populateStdAnimation(progress);
}
 
@Override
public void onMoveMotionEvent(MotionEvent ev, float diffX, float diffY) {
    int flexibleSpace = mFlexibleSpaceHeight - mTabHeight;
    float translationY = ScrollUtils.getFloat(ViewHelper.getTranslationY(mInterceptionLayout) + diffY, -flexibleSpace, 0);
    MotionEvent e = MotionEvent.obtainNoHistory(ev);
    e.offsetLocation(0, translationY - mBaseTranslationY);
    mVelocityTracker.addMovement(e);
    updateFlexibleSpace(translationY);
}
 
/**
 * Duplicate touch events to child views.
 * We want to dispatch a down motion event and the move events to
 * child views, but calling dispatchTouchEvent() causes StackOverflowError.
 * Therefore we do it manually.
 *
 * @param ev            Motion event to be passed to children.
 * @param pendingEvents Pending events like ACTION_DOWN. This will be passed to the children before ev.
 */
private void duplicateTouchEventForChildren(MotionEvent ev, MotionEvent... pendingEvents) {
    if (ev == null) {
        return;
    }
    for (int i = getChildCount() - 1; 0 <= i; i--) {
        View childView = getChildAt(i);
        if (childView != null) {
            Rect childRect = new Rect();
            childView.getHitRect(childRect);
            MotionEvent event = MotionEvent.obtainNoHistory(ev);
            if (!childRect.contains((int) event.getX(), (int) event.getY())) {
                continue;
            }
            float offsetX = -childView.getLeft();
            float offsetY = -childView.getTop();
            boolean consumed = false;
            if (pendingEvents != null) {
                for (MotionEvent pe : pendingEvents) {
                    if (pe != null) {
                        MotionEvent peAdjusted = MotionEvent.obtainNoHistory(pe);
                        peAdjusted.offsetLocation(offsetX, offsetY);
                        consumed |= childView.dispatchTouchEvent(peAdjusted);
                    }
                }
            }
            event.offsetLocation(offsetX, offsetY);
            consumed |= childView.dispatchTouchEvent(event);
            if (consumed) {
                break;
            }
        }
    }
}
 
源代码11 项目: WayHoo   文件: TouchInterceptionFrameLayout.java
/**
 * Duplicate touch events to child views.
 * We want to dispatch a down motion event and the move events to
 * child views, but calling dispatchTouchEvent() causes StackOverflowError.
 * Therefore we do it manually.
 *
 * @param ev            motion event to be passed to children
 * @param pendingEvents pending events like ACTION_DOWN. This will be passed to the children before ev
 */
private void duplicateTouchEventForChildren(MotionEvent ev, MotionEvent... pendingEvents) {
    if (ev == null) {
        return;
    }
    for (int i = getChildCount() - 1; 0 <= i; i--) {
        View childView = getChildAt(i);
        if (childView != null) {
            Rect childRect = new Rect();
            childView.getHitRect(childRect);
            MotionEvent event = MotionEvent.obtainNoHistory(ev);
            if (!childRect.contains((int) event.getX(), (int) event.getY())) {
                continue;
            }
            float offsetX = -childView.getLeft();
            float offsetY = -childView.getTop();
            boolean consumed = false;
            if (pendingEvents != null) {
                for (MotionEvent pe : pendingEvents) {
                    if (pe != null) {
                        MotionEvent peAdjusted = MotionEvent.obtainNoHistory(pe);
                        peAdjusted.offsetLocation(offsetX, offsetY);
                        consumed |= childView.dispatchTouchEvent(peAdjusted);
                    }
                }
            }
            event.offsetLocation(offsetX, offsetY);
            consumed |= childView.dispatchTouchEvent(event);
            if (consumed) {
                break;
            }
        }
    }
}
 
private MotionEvent obtainMotionEvent(MotionEvent base, int action) {
    MotionEvent ev = MotionEvent.obtainNoHistory(base);
    ev.setAction(action);
    return ev;
}
 
/** Constructs a simulated motion event for the current stack scroll. */
MotionEvent createMotionEventForStackScroll(MotionEvent ev) {
    MotionEvent pev = MotionEvent.obtainNoHistory(ev);
    pev.setLocation(0, mScroller.progressToScrollRange(mScroller.getStackScroll()));
    return pev;
}
 
private MotionEvent obtainMotionEvent(MotionEvent base, int action) {
    MotionEvent ev = MotionEvent.obtainNoHistory(base);
    ev.setAction(action);
    return ev;
}
 
源代码15 项目: WayHoo   文件: TouchInterceptionFrameLayout.java
private MotionEvent obtainMotionEvent(MotionEvent base, int action) {
    MotionEvent ev = MotionEvent.obtainNoHistory(base);
    ev.setAction(action);
    return ev;
}