public void OnDragEnd() { // TODO Auto-generated method stub MyAbsoluteLayout.LayoutParams startHandleParams = (MyAbsoluteLayout.LayoutParams)mStartSelectionHandle.LayoutParameters; MyAbsoluteLayout.LayoutParams endHandleParams = (MyAbsoluteLayout.LayoutParams)mEndSelectionHandle.LayoutParameters; float scale = GetDensityIndependentValue(Scale, mContext); float startX = startHandleParams.X - ScrollX; float startY = startHandleParams.Y - ScrollY; float endX = endHandleParams.X - ScrollX; float endY = endHandleParams.Y - ScrollY; startX = GetDensityIndependentValue(startX, mContext) / scale; startY = GetDensityIndependentValue(startY, mContext) / scale; endX = GetDensityIndependentValue(endX, mContext) / scale; endY = GetDensityIndependentValue(endY, mContext) / scale; if (mLastTouchedSelectionHandle == SELECTION_START_HANDLE && startX > 0 && startY > 0) { string saveStartString = Java.Lang.String.Format(Locale.Us, "javascript: android.selection.setStartPos(%f, %f);", startX, startY); LoadUrl(saveStartString); } if (mLastTouchedSelectionHandle == SELECTION_END_HANDLE && endX > 0 && endY > 0) { string saveEndString = Java.Lang.String.Format(Locale.Us, "javascript: android.selection.setEndPos(%f, %f);", endX, endY); LoadUrl(saveEndString); } mDragging = false; }
protected override void OnLayout(bool changed, int l, int t, int r, int b) { int count = ChildCount; int paddingL = PaddingLeft; int paddingT = PaddingTop; for (int i = 0; i < count; i++) { View child = GetChildAt(i); if (child.Visibility != ViewStates.Gone) { MyAbsoluteLayout.LayoutParams lp = (MyAbsoluteLayout.LayoutParams)child.LayoutParameters; int childLeft = paddingL + lp.X; int childTop = paddingT + lp.Y; /* * int childLeft = mPaddingLeft + lp.x; * int childTop = mPaddingTop + lp.y; */ child.Layout(childLeft, childTop, childLeft + child.MeasuredWidth, childTop + child.MeasuredHeight); } } }
protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec) { int count = ChildCount; int maxHeight = 0; int maxWidth = 0; // Find out how big everyone wants to be MeasureChildren(widthMeasureSpec, heightMeasureSpec); // Find rightmost and bottom-most child for (int i = 0; i < count; i++) { View child = GetChildAt(i); if (child.Visibility != ViewStates.Gone) { int childRight; int childBottom; MyAbsoluteLayout.LayoutParams lp = (MyAbsoluteLayout.LayoutParams)child.LayoutParameters; childRight = lp.X + child.MeasuredWidth; childBottom = lp.Y + child.MeasuredHeight; maxWidth = Math.Max(maxWidth, childRight); maxHeight = Math.Max(maxHeight, childBottom); } } // Account for padding too maxWidth += PaddingLeft + PaddingRight; maxHeight += PaddingTop + PaddingBottom; /* original * maxWidth += mPaddingLeft + mPaddingRight; * maxHeight += mPaddingTop + mPaddingBottom; */ // Check against minimum height and width maxHeight = Math.Max(maxHeight, SuggestedMinimumHeight); maxWidth = Math.Max(maxWidth, SuggestedMinimumWidth); SetMeasuredDimension(ResolveSize(maxWidth, widthMeasureSpec), ResolveSize(maxHeight, heightMeasureSpec)); }
protected void DrawSelectionHandleMessage(Message m) { MyAbsoluteLayout.LayoutParams startParams = (MyAbsoluteLayout.LayoutParams)mStartSelectionHandle.LayoutParameters; startParams.X = (int)(mSelectionBounds.Left - mStartSelectionHandle.Drawable.IntrinsicWidth); startParams.Y = (int)(mSelectionBounds.Top - mStartSelectionHandle.Drawable.IntrinsicHeight); // Stay on screen. startParams.X = (startParams.X < 0) ? 0 : startParams.X; startParams.Y = (startParams.Y < 0) ? 0 : startParams.Y; mStartSelectionHandle.LayoutParameters = startParams; MyAbsoluteLayout.LayoutParams endParams = (MyAbsoluteLayout.LayoutParams)mEndSelectionHandle.LayoutParameters; endParams.X = (int)mSelectionBounds.Right; endParams.Y = (int)mSelectionBounds.Bottom; // Stay on screen endParams.X = (endParams.X < 0) ? 0 : endParams.X; endParams.Y = (endParams.Y < 0) ? 0 : endParams.Y; mEndSelectionHandle.LayoutParameters = endParams; }