/// <returns>The center of the given view.</returns> private static int getCenterOfView(android.view.View view) { return view.getLeft() + view.getWidth() / 2; }
public override bool requestChildRectangleOnScreen(android.view.View child, android.graphics.Rect rectangle, bool immediate) { // offset into coordinate space of this scroll view rectangle.offset(child.getLeft() - child.getScrollX(), child.getTop() - child.getScrollY ()); return scrollToChildRect(rectangle, immediate); }
/// <summary> /// <p> /// Finds the next focusable component that fits in this View's bounds /// (excluding fading edges) pretending that this View's left is located at /// the parameter left. /// </summary> /// <remarks> /// <p> /// Finds the next focusable component that fits in this View's bounds /// (excluding fading edges) pretending that this View's left is located at /// the parameter left. /// </p> /// </remarks> /// <param name="leftFocus"> /// look for a candidate is the one at the left of the bounds /// if leftFocus is true, or at the right of the bounds if leftFocus /// is false /// </param> /// <param name="left"> /// the left offset of the bounds in which a focusable must be /// found (the fading edge is assumed to start at this position) /// </param> /// <param name="preferredFocusable"> /// the View that has highest priority and will be /// returned if it is within my bounds (null is valid) /// </param> /// <returns>the next focusable component in the bounds or null if none can be found</returns> private android.view.View findFocusableViewInMyBounds(bool leftFocus, int left, android.view.View preferredFocusable) { int fadingEdgeLength = getHorizontalFadingEdgeLength() / 2; int leftWithoutFadingEdge = left + fadingEdgeLength; int rightWithoutFadingEdge = left + getWidth() - fadingEdgeLength; if ((preferredFocusable != null) && (preferredFocusable.getLeft() < rightWithoutFadingEdge ) && (preferredFocusable.getRight() > leftWithoutFadingEdge)) { return preferredFocusable; } return findFocusableViewInBounds(leftFocus, leftWithoutFadingEdge, rightWithoutFadingEdge ); }
/// <summary> /// Add a view as a child and make sure it is measured (if necessary) and /// positioned properly. /// </summary> /// <remarks> /// Add a view as a child and make sure it is measured (if necessary) and /// positioned properly. /// </remarks> /// <param name="child">The view to add</param> /// <param name="position">The position of the view</param> /// <param name="y">The y position relative to which this view will be positioned</param> /// <param name="flow"> /// if true, align top edge to y. If false, align bottom edge /// to y. /// </param> /// <param name="childrenLeft">Left edge where children should be positioned</param> /// <param name="selected">Is this position selected?</param> /// <param name="recycled"> /// Has this view been pulled from the recycle bin? If so it /// does not need to be remeasured. /// </param> /// <param name="where">Where to add the item in the list</param> private void setupChild(android.view.View child, int position, int y, bool flow, int childrenLeft, bool selected, bool recycled, int where) { bool isSelected_1 = selected && shouldShowSelector(); bool updateChildSelected = isSelected_1 != child.isSelected(); int mode = mTouchMode; bool isPressed_1 = mode > TOUCH_MODE_DOWN && mode < TOUCH_MODE_SCROLL && mMotionPosition == position; bool updateChildPressed = isPressed_1 != child.isPressed(); bool needToMeasure = !recycled || updateChildSelected || child.isLayoutRequested( ); // Respect layout params that are already in the view. Otherwise make // some up... android.widget.AbsListView.LayoutParams p = (android.widget.AbsListView.LayoutParams )child.getLayoutParams(); if (p == null) { p = new android.widget.AbsListView.LayoutParams(android.view.ViewGroup.LayoutParams .MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 0); } p.viewType = mAdapter.getItemViewType(position); if (recycled && !p.forceAdd) { attachViewToParent(child, where, p); } else { p.forceAdd = false; addViewInLayout(child, where, p, true); } if (updateChildSelected) { child.setSelected(isSelected_1); if (isSelected_1) { requestFocus(); } } if (updateChildPressed) { child.setPressed(isPressed_1); } if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates != null) { if (child is android.widget.Checkable) { ((android.widget.Checkable)child).setChecked(mCheckStates.get(position)); } else { if (getContext().getApplicationInfo().targetSdkVersion >= android.os.Build.VERSION_CODES .HONEYCOMB) { child.setActivated(mCheckStates.get(position)); } } } if (needToMeasure) { int childHeightSpec = android.view.ViewGroup.getChildMeasureSpec(android.view.View .MeasureSpec.makeMeasureSpec(0, android.view.View.MeasureSpec.UNSPECIFIED), 0, p .height); int childWidthSpec = android.view.ViewGroup.getChildMeasureSpec(android.view.View .MeasureSpec.makeMeasureSpec(mColumnWidth, android.view.View.MeasureSpec.EXACTLY ), 0, p.width); child.measure(childWidthSpec, childHeightSpec); } else { cleanupLayoutState(child); } int w = child.getMeasuredWidth(); int h = child.getMeasuredHeight(); int childLeft; int childTop = flow ? y : y - h; int layoutDirection = getResolvedLayoutDirection(); int absoluteGravity = android.view.Gravity.getAbsoluteGravity(mGravity, layoutDirection ); switch (absoluteGravity & android.view.Gravity.HORIZONTAL_GRAVITY_MASK) { case android.view.Gravity.LEFT: { childLeft = childrenLeft; break; } case android.view.Gravity.CENTER_HORIZONTAL: { childLeft = childrenLeft + ((mColumnWidth - w) / 2); break; } case android.view.Gravity.RIGHT: { childLeft = childrenLeft + mColumnWidth - w; break; } default: { childLeft = childrenLeft; break; } } if (needToMeasure) { int childRight = childLeft + w; int childBottom = childTop + h; child.layout(childLeft, childTop, childRight, childBottom); } else { child.offsetLeftAndRight(childLeft - child.getLeft()); child.offsetTopAndBottom(childTop - child.getTop()); } if (mCachingStarted) { child.setDrawingCacheEnabled(true); } if (recycled && (((android.widget.AbsListView.LayoutParams)child.getLayoutParams( )).scrappedFromPosition) != position) { child.jumpDrawablesToCurrentState(); } }