Java Code Examples for android.view.View#getTop()

The following examples show how to use android.view.View#getTop() . 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: PullBackLayout.java    From youqu_master with Apache License 2.0 6 votes vote down vote up
@Override
public void onViewReleased(View releasedChild, float xvel, float yvel) {
    int slop = yvel > minimumFlingVelocity ? getHeight() / 6 : getHeight() / 3;
    if (releasedChild.getTop() > slop) {
        if (callback != null) {
            callback.onPullComplete();
        }
    } else {
        if (callback != null) {
            callback.onPullCancel();
        }

        dragger.settleCapturedViewAt(0, 0);
        invalidate();
    }
}
 
Example 2
Source File: MentionsCommentTimeLineFragment.java    From iBeebo with GNU General Public License v3.0 6 votes vote down vote up
protected void onMiddleMsgLoaderSuccessCallback(int position, CommentListBean newValue, boolean towardsBottom) {

        if (newValue != null) {
            int size = newValue.getSize();

            if (getActivity() != null && newValue.getSize() > 0) {
                getDataList().addMiddleData(position, newValue, towardsBottom);

                if (towardsBottom) {
                    getAdapter().notifyDataSetChanged();
                } else {

                    View v = Utility.getListViewItemViewFromPosition(getListView(), position + 1 + 1);
                    int top = (v == null) ? 0 : v.getTop();
                    getAdapter().notifyDataSetChanged();
                    int ss = position + 1 + size - 1;
                    getListView().setSelectionFromTop(ss, top);
                }
            }
        }
    }
 
Example 3
Source File: PullToZoomListViewEx.java    From light-novel-library_Wenku8_Android with GNU General Public License v2.0 6 votes vote down vote up
private boolean isFirstItemVisible() {
    final Adapter adapter = mRootView.getAdapter();

    if (null == adapter || adapter.isEmpty()) {
        return true;
    } else {
        /**
         * This check should really just be:
         * mRootView.getFirstVisiblePosition() == 0, but PtRListView
         * internally use a HeaderView which messes the positions up. For
         * now we'll just add one to account for it and rely on the inner
         * condition which checks getTop().
         */
        if (mRootView.getFirstVisiblePosition() <= 1) {
            final View firstVisibleChild = mRootView.getChildAt(0);
            if (firstVisibleChild != null) {
                return firstVisibleChild.getTop() >= mRootView.getTop();
            }
        }
    }

    return false;
}
 
Example 4
Source File: SlidingPaneLayout.java    From KlyphMessenger with MIT License 6 votes vote down vote up
/**
 * Tests scrollability within child views of v given a delta of dx.
 *
 * @param v View to test for horizontal scrollability
 * @param checkV Whether the view v passed should itself be checked for scrollability (true),
 *               or just its children (false).
 * @param dx Delta scrolled in pixels
 * @param x X coordinate of the active touch point
 * @param y Y coordinate of the active touch point
 * @return true if child views of v can be scrolled by delta of dx.
 */
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
    if (v instanceof ViewGroup) {
        final ViewGroup group = (ViewGroup) v;
        final int scrollX = v.getScrollX();
        final int scrollY = v.getScrollY();
        final int count = group.getChildCount();
        // Count backwards - let topmost views consume scroll distance first.
        for (int i = count - 1; i >= 0; i--) {
            // TODO: Add versioned support here for transformed views.
            // This will not work for transformed views in Honeycomb+
            final View child = group.getChildAt(i);
            if (x + scrollX >= child.getLeft() && x + scrollX < child.getRight() &&
                    y + scrollY >= child.getTop() && y + scrollY < child.getBottom() &&
                    canScroll(child, true, dx, x + scrollX - child.getLeft(),
                            y + scrollY - child.getTop())) {
                return true;
            }
        }
    }

    return checkV && ViewCompat.canScrollHorizontally(v, -dx);
}
 
Example 5
Source File: PendIntentCompat.java    From container with GNU General Public License v3.0 6 votes vote down vote up
private Rect getRect(View view) {
	Rect rect = new Rect();
	rect.top = view.getTop();
	rect.left = view.getLeft();
	rect.right = view.getRight();
	rect.bottom = view.getBottom();

	ViewParent viewParent = view.getParent();
	if (viewParent != null) {
		if (viewParent instanceof ViewGroup) {
			Rect prect = getRect((ViewGroup) viewParent);
			rect.top += prect.top;
			rect.left += prect.left;
			rect.right += prect.left;
			rect.bottom += prect.top;
		}
	}
	return rect;
}
 
Example 6
Source File: AppBarLayout.java    From ticdesign with Apache License 2.0 5 votes vote down vote up
private View getChildOnOffset(AppBarLayout abl, final int offset) {
    for (int i = 0, count = abl.getChildCount(); i < count; i++) {
        View child = abl.getChildAt(i);
        if (child.getTop() <= -offset && child.getBottom() >= -offset) {
            return child;
        }
    }
    return null;
}
 
Example 7
Source File: SwipeLayout.java    From StickyListHeadersWithRefreshAndLoadMore with Apache License 2.0 5 votes vote down vote up
/**
 * close surface
 *
 * @param smooth smoothly or not.
 * @param notify if notify all the listeners.
 */
public void close(boolean smooth, boolean notify) {
    View surface = getSurfaceView();

    View bottomView = getCurrentBottomView();

    if (surface == null) {
        return;
    }

    Rect rect = computeSurfaceLayoutArea(false);

    int dx, dy;
    if (smooth) {
        mDragHelper.smoothSlideViewTo(getSurfaceView(), rect.left, rect.top);
        mDragHelper.smoothSlideViewTo(bottomView, rect.right, rect.top);
    } else {
        int measuredWidth = bottomView.getMeasuredWidth();
        dx = rect.left - surface.getLeft();
        dy = rect.top - surface.getTop();
        surface.layout(rect.left, rect.top, rect.right, rect.bottom);
        bottomView.layout(rect.right, rect.top, rect.right + measuredWidth, rect.bottom);

        if (notify) {
            dispatchRevealEvent(rect.left, rect.top, rect.right, rect.bottom);
            dispatchSwipeEvent(rect.left, rect.top, dx, dy);
        } else {
            safeBottomView();
        }
    }
    invalidate();
}
 
Example 8
Source File: ViewDragHelper.java    From UltimateSwipeTool with Apache License 2.0 5 votes vote down vote up
/**
 * Tests scrollability within child views of v given a delta of dx.
 *
 * @param v      View to test for horizontal scrollability
 * @param checkV Whether the view v passed should itself be checked for
 *               scrollability (true), or just its children (false).
 * @param dx     Delta scrolled in pixels along the X axis
 * @param dy     Delta scrolled in pixels along the Y axis
 * @param x      X coordinate of the active touch point
 * @param y      Y coordinate of the active touch point
 * @return true if child views of v can be scrolled by delta of dx.
 */
protected boolean canScroll(View v, boolean checkV, int dx, int dy, int x, int y) {
    if (v instanceof ViewGroup) {
        final ViewGroup group = (ViewGroup) v;
        final int scrollX = v.getScrollX();
        final int scrollY = v.getScrollY();
        final int count = group.getChildCount();
        // Count backwards - let topmost views consume scroll distance
        // first.
        for (int i = count - 1; i >= 0; i--) {
            // TODO: Add versioned support here for transformed views.
            // This will not work for transformed views in Honeycomb+
            final View child = group.getChildAt(i);
            if (x + scrollX >= child.getLeft()
                    && x + scrollX < child.getRight()
                    && y + scrollY >= child.getTop()
                    && y + scrollY < child.getBottom()
                    && canScroll(child, true, dx, dy, x + scrollX - child.getLeft(), y
                    + scrollY - child.getTop())) {
                return true;
            }
        }
    }

    return checkV
            && (ViewCompat.canScrollHorizontally(v, -dx) || ViewCompat.canScrollVertically(v,
            -dy));
}
 
Example 9
Source File: YearPickerView.java    From MaterialDateRangePicker with Apache License 2.0 5 votes vote down vote up
public int getFirstPositionOffset() {
    final View firstChild = getChildAt(0);
    if (firstChild == null) {
        return 0;
    }
    return firstChild.getTop();
}
 
Example 10
Source File: AbsListViewDelegate.java    From KlyphMessenger with MIT License 5 votes vote down vote up
@Override
public boolean isReadyForPull(View view, final float x, final float y) {
    boolean ready = false;

    // First we check whether we're scrolled to the top
    AbsListView absListView = (AbsListView) view;
    if (absListView.getCount() == 0) {
        ready = true;
    } else if (absListView.getFirstVisiblePosition() == 0) {
        final View firstVisibleChild = absListView.getChildAt(0);
        ready = firstVisibleChild != null && firstVisibleChild.getTop() >= 0;
    }

    // Then we have to check whether the fas scroller is enabled, and check we're not starting
    // the gesture from the scroller
    if (ready && absListView.isFastScrollEnabled() && isFastScrollAlwaysVisible(absListView)) {
        switch (getVerticalScrollbarPosition(absListView)) {
            case View.SCROLLBAR_POSITION_RIGHT:
                ready = x < absListView.getRight() - absListView.getVerticalScrollbarWidth();
                break;
            case View.SCROLLBAR_POSITION_LEFT:
                ready = x > absListView.getVerticalScrollbarWidth();
                break;
        }
    }

    return ready;
}
 
Example 11
Source File: PagedView.java    From LB-Launcher with Apache License 2.0 5 votes vote down vote up
float[] mapPointFromViewToParent(View v, float x, float y) {
    mTmpPoint[0] = x;
    mTmpPoint[1] = y;
    v.getMatrix().mapPoints(mTmpPoint);
    mTmpPoint[0] += v.getLeft();
    mTmpPoint[1] += v.getTop();
    return mTmpPoint;
}
 
Example 12
Source File: GridItemDecoration.java    From BaseRecyclerViewAdapterHelper with MIT License 5 votes vote down vote up
/**
 * @param c
 * @param parent
 * @param state
 */
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
    if (dividerDrawable == null) {
        return;
    }

    int childCount = parent.getChildCount();
    int rightV = parent.getWidth();
    for (int i = 0; i < childCount; i++) {
        View child = parent.getChildAt(i);
        RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

        int leftV = parent.getPaddingLeft() + child.getPaddingLeft();
        int bottomV = child.getTop() - params.topMargin;
        int topV = bottomV - dividerDrawable.getIntrinsicHeight();

        int topH = child.getTop() + params.topMargin;
        int bottomH = child.getBottom() + params.bottomMargin;
        int rightH = child.getLeft() - params.leftMargin;
        int leftH = rightH - dividerDrawable.getIntrinsicWidth();
        dividerDrawable.setBounds(leftH, topH, rightH, bottomH);
        dividerDrawable.draw(c);
        dividerDrawable.setBounds(leftV, topV, rightV, bottomV);
        dividerDrawable.draw(c);
    }
}
 
Example 13
Source File: NestedScrollView.java    From AndroidAnimationExercise with Apache License 2.0 5 votes vote down vote up
private boolean inChild(int x, int y) {
    if (getChildCount() > 0) {
        final int scrollY = getScrollY();
        final View child = getChildAt(0);
        return !(y < child.getTop() - scrollY
                || y >= child.getBottom() - scrollY
                || x < child.getLeft()
                || x >= child.getRight());
    }
    return false;
}
 
Example 14
Source File: DividerHelper.java    From PinnedSectionItemDecoration with Apache License 2.0 5 votes vote down vote up
public static void drawLeftAlignItem(Canvas canvas, Drawable drawable, View child, ViewGroup.MarginLayoutParams params) {

        final int top = child.getTop() - params.topMargin;
        final int bottom = child.getBottom() + params.bottomMargin;
        final int left = child.getLeft() - params.leftMargin - drawable.getIntrinsicWidth();
        final int right = left + drawable.getIntrinsicWidth();

        drawable.setBounds(left, top, right, bottom);

        drawable.draw(canvas);
    }
 
Example 15
Source File: PullToRefreshLayout.java    From ALLGO with Apache License 2.0 5 votes vote down vote up
private View getChildForTouchEvent(MotionEvent event) {
    final float x = event.getX(), y = event.getY();
    View child;
    for (int z = getChildCount() - 1;  z >= 0 ; z--) {
        child = getChildAt(z);
        if (child.isShown() && x >= child.getLeft() && x <= child.getRight()
                && y >= child.getTop() && y <= child.getBottom()) {
            if (DEBUG) Log.d(LOG_TAG, "Got Child for Touch Event: " + child);
            return child;
        }
    }
    return null;
}
 
Example 16
Source File: ViewScrollUtil.java    From PullRefreshView with Apache License 2.0 5 votes vote down vote up
@Override
public int getScrollY() {
    int firstVisiblePosition = absListView.getFirstVisiblePosition();
    View c = absListView.getChildAt(0);
    if (c == null) {
        return 0;
    }
    int top = c.getTop() - absListView.getPaddingTop();
    return -top + firstVisiblePosition * c.getHeight();
}
 
Example 17
Source File: HeaderPositionCalculator.java    From ZhiHu-TopAnswer with Apache License 2.0 5 votes vote down vote up
/**
 * Determines if an item is obscured by a header
 *
 *
 * @param parent
 * @param item        to determine if obscured by header
 * @param header      that might be obscuring the item
 * @param orientation of the {@link RecyclerView}
 * @return true if the item view is obscured by the header view
 */
private boolean itemIsObscuredByHeader(RecyclerView parent, View item, View header, int orientation) {
  RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) item.getLayoutParams();
  mDimensionCalculator.initMargins(mTempRect1, header);

  int adapterPosition = parent.getChildAdapterPosition(item);
  if (adapterPosition == RecyclerView.NO_POSITION || mHeaderProvider.getHeader(parent, adapterPosition) != header) {
    // Resolves https://github.com/timehop/sticky-headers-recyclerview/issues/36
    // Handles an edge case where a trailing header is smaller than the current sticky header.
    return false;
  }

  if (orientation == LinearLayoutManager.VERTICAL) {
    int itemTop = item.getTop() - layoutParams.topMargin;
    int headerBottom = header.getBottom() + mTempRect1.bottom + mTempRect1.top;
    if (itemTop > headerBottom) {
      return false;
    }
  } else {
    int itemLeft = item.getLeft() - layoutParams.leftMargin;
    int headerRight = header.getRight() + mTempRect1.right + mTempRect1.left;
    if (itemLeft > headerRight) {
      return false;
    }
  }

  return true;
}
 
Example 18
Source File: SmallPinnedHeaderItemDecoration.java    From PinnedSectionItemDecoration with Apache License 2.0 4 votes vote down vote up
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {

    if (mEnableDivider) {
        drawDivider(c, parent);
    }

    // 只支持LinearLayoutManager或者GridLayoutManager且一行只有一列的情况,这个比较符合使用场景
    if (parent.getLayoutManager() instanceof GridLayoutManager && ((GridLayoutManager) parent.getLayoutManager()).getSpanCount() > 1) {
        return;
    } else if (parent.getLayoutManager() instanceof StaggeredGridLayoutManager) {
        return;
    }

    // 检测到标签存在的时候,将标签强制固定在RecyclerView顶部
    createPinnedHeader(parent);

    if (!mDisableDrawHeader && mPinnedHeaderView != null && mFirstVisiblePosition >= mHeaderPosition) {
        // 标签相对parent高度加上自身的高度
        final int headerEndAt = mPinnedHeaderParentView.getTop() + mPinnedHeaderParentView.getMeasuredHeight() + mRecyclerViewPaddingTop;
        // 根据xy坐标查找view
        View v = parent.findChildViewUnder(c.getWidth() / 2, headerEndAt + 1);
        if (isPinnedHeader(parent, v) && v.getTop() <= mPinnedHeaderView.getHeight() + mRecyclerViewPaddingTop + mParentPaddingTop) {
            // 如果view是标签的话,那么缓存的标签就要跟随这个真正的标签标签移动了,效果类似于下面的标签把它顶上去一样
            // 得到mPinnedHeaderView为标签跟随移动的位移
            mPinnedHeaderOffset = v.getTop() - (mRecyclerViewPaddingTop + mParentPaddingTop + mPinnedHeaderView.getHeight());
        } else {
            mPinnedHeaderOffset = 0;
        }

        //            Log.e("TAG", "SmallPinnedHeaderItemDecoration-152行-onDraw(): " + v.getTop() + ";" + mPinnedHeaderOffset);

        // 拿到锁定的矩形
        mClipBounds = c.getClipBounds();

        mClipBounds.left = 0;
        mClipBounds.right = parent.getWidth();
        mClipBounds.top = mRecyclerViewPaddingTop + mParentPaddingTop;
        mClipBounds.bottom = parent.getHeight();

        // 重新锁定
        c.clipRect(mClipBounds);

    }
}
 
Example 19
Source File: HomeActivity.java    From Expert-Android-Programming with MIT License 4 votes vote down vote up
private int getRelativeTop(View myView) {
    if (myView.getParent() == myView.getRootView())
        return myView.getTop();
    else
        return myView.getTop() + getRelativeTop((View) myView.getParent());
}
 
Example 20
Source File: PieView.java    From quickmark with MIT License 4 votes vote down vote up
@Override
public boolean onTouch(View v, MotionEvent event) {

	boolean enable = true;
	float x = centerPoint.x;
	float y = centerPoint.y;
	float y1 = event.getY();
	float x1 = event.getX();

	float x2 = v.getLeft();
	float y2 = v.getTop();

	float x3 = x1 - x2;
	float y3 = y1 - y2;

	if (event.getAction() == MotionEvent.ACTION_DOWN) {
		m_x = x3;
		m_y = y3;
		tounched = true;

	}

	if (event.getAction() == MotionEvent.ACTION_UP) {
		m_x = 0;
		m_y = 0;
		tounched = false;

	}

	float d = (float) Math.sqrt((Math.pow(Math.abs((x - x3)), 2) + Math
			.pow(Math.abs((y - y3)), 2)));
	if (d > radius) {
		m_x = 0;
		m_y = 0;
		enable = false;

	}

	if (event.getAction() == MotionEvent.ACTION_MOVE) {

		if ((m_x == 0) && (m_y == 0)) {

			enable = false;
		}
		if (enable) {
			float c = (float) Math
					.sqrt((Math.pow(Math.abs((m_x - x3)), 2) + Math.pow(
							Math.abs((m_y - y3)), 2)));
			float a = (float) Math
					.sqrt((Math.pow(Math.abs(m_x - x), 2) + Math.pow(
							Math.abs((m_y - y)), 2)));
			float b = (float) Math
					.sqrt((Math.pow(Math.abs(x3 - x), 2) + Math.pow(
							Math.abs((y3 - y)), 2)));

			float cosc = (float) (Math.pow(a, 2) + Math.pow(b, 2) - Math
					.pow(c, 2)) / (2 * a * b);

			float m_angle = getAngle((m_x - x), (m_y - y));

			float angle3 = getAngle((x3 - x), (y3 - y));
			if ((90 > m_angle) && (angle3 > 270)) {
				m_angle = m_angle + (float) 360;
			}
			if ((90 > angle3) && (m_angle > 270)) {
				angle3 = angle3 + (float) 360;
			}
			if (angle3 - m_angle > 0) {
				startAngle = (float) (startAngle + Math.acos(cosc) * 180
						/ Math.PI);
			} else {
				startAngle = (float) (startAngle - Math.acos(cosc) * 180
						/ Math.PI);
			}
			m_x = x3;
			m_y = y3;
		}

	}

	return true;
}