Пример #1
0
        public CameraPreview(Context context)
            : base(context)
        {
            _surfaceView        = new SurfaceView(context);
            _surfaceView.Touch += (sender, args) =>
            {
                var x = args.Event.GetX();
                var y = args.Event.GetY();

                var touchRect = new Android.Graphics.Rect(
                    (int)(x - 100),
                    (int)(y - 100),
                    (int)(x + 100),
                    (int)(y + 100));


                var targetFocusRect = new Android.Graphics.Rect(
                    touchRect.Left * 2000 / this.Width - 1000,
                    touchRect.Top * 2000 / this.Height - 1000,
                    touchRect.Right * 2000 / this.Width - 1000,
                    touchRect.Bottom * 2000 / this.Height - 1000);

                this.DoTouchFocus(targetFocusRect);
            };

            AddView(_surfaceView);

            _windowManager = Context.GetSystemService(Context.WindowService).JavaCast <IWindowManager>();

            IsPreviewing = false;
            _holder      = _surfaceView.Holder;
            _holder.AddCallback(this);
        }
Пример #2
0
        private Android.Graphics.Rect GetWindowRect()
        {
            var windowRect = new Android.Graphics.Rect();

            _activity.WindowManager.DefaultDisplay.GetRectSize(windowRect);
            return(windowRect);
        }
Пример #3
0
        void AdjustHorizontalScroll(int index, ScrollToPosition scrollToPosition)
        {
            _pendingScrollAdjustment = null;

            var viewRect = GetViewRect(index);

            if (viewRect == null)
            {
                return;
            }

            var offset = 0;

            var rvRect = new ARect();

            _recyclerView.GetGlobalVisibleRect(rvRect);

            if (scrollToPosition == ScrollToPosition.Center)
            {
                offset = viewRect.CenterX() - rvRect.CenterX();
            }
            else if (scrollToPosition == ScrollToPosition.End)
            {
                offset = viewRect.Right - rvRect.Right;
            }

            _recyclerView.ScrollBy(offset, 0);
        }
Пример #4
0
 public override void GetItemOffsets(Android.Graphics.Rect outRect, int itemPosition, RecyclerView parent)
 {
     //TODO - work out if the rectangle is the last/first row/column
     if (itemPosition % _numberOfItemsPerRow == 0)
     {
         //first col
         outRect.Left = _columnSpacing;
     }
     else
     {
         outRect.Left = _columnSpacing / 2;
     }
     if (itemPosition % _numberOfItemsPerRow == (_numberOfItemsPerRow - 1))
     {
         //last col
         outRect.Right = _columnSpacing;
     }
     else
     {
         outRect.Right = _columnSpacing / 2;
     }
     //TODO write a custom layout for android
     //			if (itemPosition < _numberOfItemsPerRow) {
     //				outRect.Top = _topSpacing;
     //			}
     //			if (itemPosition > (_numberOfItems - _numberOfItemsPerRow)) {
     //				outRect.Bottom = _bottomSpacing;
     //			} else {
     outRect.Bottom = _rowSpacing;
     //			}
 }
Пример #5
0
        public void DrawImage(Image image, Rectangle to, int fromx, int fromy, int fromw, int fromh, GraphicsUnit gu, ImageAttributes ia)
        {
            APaint.Flags = (Android.Graphics.PaintFlags) 0;
            var sa = new Android.Graphics.Rect(fromx, fromy, fromx + fromw, fromy + fromh);
            var da = to.ToA();

            Android.Graphics.Paint p = null;
            Android.Graphics.ColorMatrixColorFilter cmf = null;
            if (ia != null && ia.GetColorMatrix() != null)
            {
                p = new Android.Graphics.Paint(APaint);
                var     values = ia.GetColorMatrix().Matrix;
                float[] v2     = values[0].Concat(values[1]).Concat(values[2]).Concat(values[3]).ToArray();
                cmf = new Android.Graphics.ColorMatrixColorFilter(v2);
                p.SetColorFilter(cmf);
            }
            ACanvas.DrawBitmap((image as Bitmap).ABitmap, sa, da, p == null ? APaint : p);
            if (p != null)
            {
                p.Dispose();
            }
            if (cmf != null)
            {
                cmf.Dispose();
            }
            da.Dispose();
            sa.Dispose();
        }
Пример #6
0
        void AdjustVerticalScroll(int index, ScrollToPosition scrollToPosition)
        {
            _pendingScrollAdjustment = null;

            var viewRect = GetViewRect(index);

            if (viewRect == null)
            {
                return;
            }

            var offset = 0;

            var rvRect = new ARect();

            _recyclerView.GetGlobalVisibleRect(rvRect);

            if (scrollToPosition == ScrollToPosition.Center)
            {
                offset = viewRect.CenterY() - rvRect.CenterY();
            }
            else if (scrollToPosition == ScrollToPosition.End)
            {
                offset = viewRect.Bottom - rvRect.Bottom;
            }

            _recyclerView.ScrollBy(0, offset);
        }
        protected override void Draw(Canvas canvas, Rect bounds)
        {
            int saveCount = canvas.Save();

            RectF arcBounds = mCurrentBounds;

            arcBounds.Set(bounds);
            //draw bottle
            mPaint.SetStyle(Paint.Style.Stroke);
            mPaint.Color = new Color(mBottleColor);
            canvas.DrawPath(CreateBottlePath(mBottleBounds), mPaint);

            //draw water
            mPaint.SetStyle(Paint.Style.FillAndStroke);
            mPaint.Color = new Color(mWaterColor);
            canvas.DrawPath(CreateWaterPath(mWaterBounds, mProgress), mPaint);

            //draw water drop
            mPaint.SetStyle(Paint.Style.Fill);
            mPaint.Color = new Color(mWaterColor);
            foreach (WaterDropHolder waterDropHolder in mWaterDropHolders)
            {
                if (waterDropHolder.mNeedDraw)
                {
                    canvas.DrawCircle(waterDropHolder.mInitX, waterDropHolder.mCurrentY, waterDropHolder.mRadius, mPaint);
                }
            }

            //draw loading text
            mPaint.Color = new Color(mBottleColor);
            canvas.DrawText(LOADING_TEXT, mBottleBounds.CenterX() - mLoadingBounds.Width() / 2.0f, mBottleBounds.Bottom + mBottleBounds.Height() * 0.2f, mPaint);
            canvas.RestoreToCount(saveCount);
        }
Пример #8
0
        protected virtual Thickness GetNativePadding()
        {
            if (this.NativeUIElement.Background == null)
            {
                return(new Thickness(0));
            }

            Android.Graphics.Rect rect = new Android.Graphics.Rect();
            this.NativeUIElement.Background.GetPadding(rect);

            Thickness absoluteNativePadding = new Thickness();

            absoluteNativePadding.Left   = rect.Left + (this.NativeUIElement.Background.MinimumWidth - rect.Left - rect.Right) / 2.0;
            absoluteNativePadding.Top    = rect.Top + (this.NativeUIElement.Background.MinimumHeight - rect.Top - rect.Bottom) / 2.0;
            absoluteNativePadding.Right  = rect.Right + (this.NativeUIElement.Background.MinimumWidth - rect.Left - rect.Right) / 2.0;
            absoluteNativePadding.Bottom = rect.Bottom + (this.NativeUIElement.Background.MinimumHeight - rect.Top - rect.Bottom) / 2.0;

            Thickness dpiNativePadding = new Thickness();

            dpiNativePadding.Left   = ScreenProperties.ConvertPixelsToDPI((float)absoluteNativePadding.Left);
            dpiNativePadding.Top    = ScreenProperties.ConvertPixelsToDPI((float)absoluteNativePadding.Top);
            dpiNativePadding.Right  = ScreenProperties.ConvertPixelsToDPI((float)absoluteNativePadding.Right);
            dpiNativePadding.Bottom = ScreenProperties.ConvertPixelsToDPI((float)absoluteNativePadding.Bottom);

            return(dpiNativePadding);
        }
Пример #9
0
        public void DoTouchFocus(Android.Graphics.Rect focusRect)
        {
            try
            {
                var         list      = new List <Camera.Area>();
                Camera.Area focusArea = new Camera.Area(focusRect, 1000);
                list.Add(focusArea);

                var parameters = _camera.GetParameters();
                parameters.FocusAreas    = list;
                parameters.MeteringAreas = list;
                _camera.SetParameters(parameters);

                _camera.AutoFocus(this);
            }
            catch (Exception exception)
            {
//                e.printStackTrace();
            }

            //if (isNeedToTakePic())
            //{
            //    onFocusListener.onFocused();
            //}
        }
Пример #10
0
        public override void GetItemOffsets(Android.Graphics.Rect outRect, Android.Views.View view, RecyclerView parent, RecyclerView.State state)
        {
            var index = ((RecyclerView.LayoutParams)view.LayoutParameters).ViewAdapterPosition;

            if (_skipFirst)
            {
                if (index == 0)
                {
                    base.GetItemOffsets(outRect, view, parent, state);
                    return;
                }
                index--;
            }

            switch (index % 3)
            {
            case 0:
            {
                outRect.Set(0, 0, 2, 3);
                break;
            }

            case 1:
            {
                outRect.Set(1, 0, 1, 3);
                break;
            }

            case 2:
            {
                outRect.Set(2, 0, 0, 3);
                break;
            }
            }
        }
Пример #11
0
        public override Rectangle GetScreenBounds(object backend)
        {
            var d = (Android.Views.Display)backend;
            var r = new Android.Graphics.Rect();

            d.GetRectSize(r);
            return(Xwt.Rectangle.FromLTRB(r.Left, r.Top, r.Right, r.Bottom));
        }
Пример #12
0
        bool IsViewInBounds(AView view, int x, int y)
        {
            ARect outRect = new ARect();

            view.GetHitRect(outRect);

            return(x > outRect.Left && x < outRect.Right && y > outRect.Top && y < outRect.Bottom);
        }
Пример #13
0
        public override void GetItemOffsets(ARect outRect, AView view, RecyclerView parent, RecyclerView.State state)
        {
            base.GetItemOffsets(outRect, view, parent, state);

            outRect.Left   = HorizontalOffset;
            outRect.Right  = HorizontalOffset;
            outRect.Bottom = VerticalOffset;
            outRect.Top    = VerticalOffset;
        }
Пример #14
0
        public override void GetItemOffsets(ARect outRect, AView view, RecyclerView parent, RecyclerView.State state)
        {
            base.GetItemOffsets(outRect, view, parent, state);

            if (_adjustedVerticalSpacing == -1)
            {
                _adjustedVerticalSpacing = (int)parent.Context.ToPixels(_verticalSpacing);
            }

            if (_adjustedHorizontalSpacing == -1)
            {
                _adjustedHorizontalSpacing = (int)parent.Context.ToPixels(_horizontalSpacing);
            }

            var itemViewType = parent.GetChildViewHolder(view).ItemViewType;

            if (itemViewType == ItemViewType.Header)
            {
                if (_orientation == ItemsLayoutOrientation.Vertical)
                {
                    outRect.Bottom = _adjustedVerticalSpacing;
                }
                else
                {
                    outRect.Right = _adjustedHorizontalSpacing;
                }

                return;
            }

            if (itemViewType == ItemViewType.Footer)
            {
                return;
            }

            var spanIndex = 0;

            if (view.LayoutParameters is GridLayoutManager.LayoutParams gridLayoutParameters)
            {
                spanIndex = gridLayoutParameters.SpanIndex;
            }

            var spanGroupIndex = GetSpanGroupIndex(view, parent);

            if (_orientation == ItemsLayoutOrientation.Vertical)
            {
                outRect.Left = spanIndex == 0 ? 0 : _adjustedHorizontalSpacing;
                outRect.Top  = spanGroupIndex == 0 ? 0 : _adjustedVerticalSpacing;
            }

            if (_orientation == ItemsLayoutOrientation.Horizontal)
            {
                outRect.Top  = spanIndex == 0 ? 0 : _adjustedVerticalSpacing;
                outRect.Left = spanGroupIndex == 0 ? 0 : _adjustedHorizontalSpacing;
            }
        }
Пример #15
0
        public void DrawImage(Image image, int x, int y, Rectangle source, GraphicsUnit gu)
        {
            APaint.Flags = (Android.Graphics.PaintFlags) 0;
            var sa = source.ToA();
            var da = new Android.Graphics.Rect(x, y, x + source.Width, y + source.Height);

            ACanvas.DrawBitmap((image as Bitmap).ABitmap, sa, da, APaint);
            da.Dispose();
            sa.Dispose();
        }
Пример #16
0
		private static int ComputeWidth(TextView tv, bool isOrdered)
		{
			Android.Graphics.Paint paint = tv.Paint;
			using var bounds = new Android.Graphics.Rect();
			var startString = isOrdered ? "99. " : "• ";
		    paint.GetTextBounds(startString, 0, startString.Length, bounds);
			var width = bounds.Width();
			var pt = Android.Util.TypedValue.ApplyDimension(Android.Util.ComplexUnitType.Pt, width, tv.Context.Resources.DisplayMetrics);			
			return (int)pt;
		}
Пример #17
0
        public double StringSize(string text)
        {
            var      bounds = new Android.Graphics.Rect();
            TextView view   = new TextView(Forms.Context);

            view.Paint.GetTextBounds(text, 0, text.Length, bounds);
            var length = bounds.Width();

            return(length / Resources.System.DisplayMetrics.ScaledDensity);
        }
Пример #18
0
 private int computeUsableHeight()
 {
     Android.Graphics.Rect r = new Android.Graphics.Rect();
     mChildOfContent.GetWindowVisibleDisplayFrame(r);
     if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop)
     {
         return(r.Bottom - r.Top);
     }
     return(r.Bottom);
 }
Пример #19
0
        void ViewTreeObserver.IOnGlobalLayoutListener.OnGlobalLayout()
        {
            Android.Graphics.Rect rect = new Android.Graphics.Rect();
            Window.DecorView.GetWindowVisibleDisplayFrame(rect);

            Single size = _view.Height - rect.Height();

            if (_onLayoutChanged != null)
            {
                _onLayoutChanged.Invoke(size);
            }
        }
Пример #20
0
        protected override void Draw(Canvas canvas, Rect bounds)
        {
            int saveCount = canvas.Save();

            RectF arcBounds = mTempBounds;

            arcBounds.Set(bounds);

            mPaint.Alpha = MAX_ALPHA;
            mPaint.SetStyle(Paint.Style.Stroke);
            mPaint.Color = new Color(mCurrentColor);

            if (mSunCoordinateY < mInitSun_MoonCoordinateY)
            {
                canvas.DrawCircle(arcBounds.CenterX(), mSunCoordinateY, mSun_MoonRadius, mPaint);
            }

            if (mMoonCoordinateY < mInitSun_MoonCoordinateY)
            {
                int moonSaveCount = canvas.Save();
                canvas.Rotate(mMoonRotation, arcBounds.CenterX(), mMoonCoordinateY);
                canvas.DrawPath(CreateMoonPath(arcBounds.CenterX(), mMoonCoordinateY), mPaint);
                canvas.RestoreToCount(moonSaveCount);
            }

            for (int i = 0; i < mSunRayCount; i++)
            {
                int sunRaySaveCount = canvas.Save();
                //rotate 45 degrees can change the direction of 0 degrees to 1:30 clock
                //-mSunRayRotation means reverse rotation
                canvas.Rotate(45 - mSunRayRotation + (mIsExpandSunRay ? i : MAX_SUN_RAY_COUNT - i) * DEGREE_360 / MAX_SUN_RAY_COUNT, arcBounds.CenterX(), mSunCoordinateY);

                canvas.DrawLine(arcBounds.CenterX(), mSunRayStartCoordinateY, arcBounds.CenterX(), mSunRayEndCoordinateY, mPaint);
                canvas.RestoreToCount(sunRaySaveCount);
            }

            if (mShowStar)
            {
                if (mStarHolders.Count == 0)
                {
                    InitStarHolders(arcBounds);
                }

                for (int i = 0; i < mStarHolders.Count; i++)
                {
                    mPaint.SetStyle(Paint.Style.Fill);
                    mPaint.Alpha = mStarHolders[i].mAlpha;
                    canvas.DrawCircle(mStarHolders[i].mCurrentPoint.X, mStarHolders[i].mCurrentPoint.Y, mStarRadius, mPaint);
                }
            }

            canvas.RestoreToCount(saveCount);
        }
Пример #21
0
        static void UpdateLayout(TextView textview, Element element, Android.Views.View v)
        {
            if (string.IsNullOrEmpty(textview.Text))
            {
                return;
            }

            var margin = AddText.GetMargin(element);

            margin.Left   = (int)v.Context.ToPixels(margin.Left);
            margin.Top    = (int)v.Context.ToPixels(margin.Top);
            margin.Right  = (int)v.Context.ToPixels(margin.Right);
            margin.Bottom = (int)v.Context.ToPixels(margin.Bottom);

            var textpaint = textview.Paint;
            var rect      = new Android.Graphics.Rect();
            //textpaint.GetTextBounds(textview.Text, 0, textview.Text.Length, rect); // GetTextBound.Width is sometimes a little small less than actual width.
            var textWidth = (int)textpaint.MeasureText(textview.Text);

            var xPos = 0;

            if (AddText.GetHorizontalAlign(element) == Xamarin.Forms.TextAlignment.End)
            {
                xPos = v.Width - textWidth - textview.PaddingLeft - textview.PaddingRight - (int)margin.Right - 4;
                if (xPos < (int)margin.Left)
                {
                    xPos = (int)margin.Left;
                }
                textview.Right = v.Width - (int)margin.Right;
            }
            else
            {
                xPos           = (int)margin.Left;
                textview.Right = (int)margin.Left + textWidth + textview.PaddingLeft + textview.PaddingRight + 4;
                if (textview.Right >= v.Width)
                {
                    textview.Right = v.Width - (int)margin.Right;
                }
            }

            textview.Left = xPos;


            var fm     = textpaint.GetFontMetrics();
            var height = (int)(Math.Abs(fm.Top) + fm.Bottom + textview.PaddingTop + textview.PaddingEnd);
            var yPos   = AddText.GetVerticalAlign(element) == Xamarin.Forms.TextAlignment.Start ? 0 + (int)margin.Top : v.Height - height - (int)margin.Bottom;

            textview.Top    = yPos;
            textview.Bottom = yPos + height;

            textview.Text = textview.Text; // HACK: For some reason, Invalidate is not work. Use reassign text instead of.
        }
Пример #22
0
        public void PlatformToSystemException(float x, float y, float width, float height)
        {
#if __IOS__
            var platform = new CoreGraphics.CGRect(x, y, width, height);
            Assert.Throws <ArgumentOutOfRangeException>(() => platform.ToSystemRectangle());
#elif __ANDROID__
            var platform = new Android.Graphics.Rect((int)x, (int)y, (int)width, (int)height);
            Assert.Throws <ArgumentOutOfRangeException>(() => platform.ToSystemRectangle());
#elif WINDOWS_UWP
            var platform = new Windows.Foundation.Rect(x, y, width, height);
            Assert.Throws <ArgumentOutOfRangeException>(() => platform.ToSystemRectangle());
#endif
        }
Пример #23
0
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            Android.Graphics.Rect rect = new Android.Graphics.Rect();
            Window.DecorView.GetWindowVisibleDisplayFrame(rect);
            JitterPhysicsGame.PreferredSize = new Vector2(rect.Width(), rect.Height());

            var game = new JitterPhysicsGame();
            var view = (View)game.Services.GetService(typeof(View));
            SetContentView(view);
            game.Run();
        }
Пример #24
0
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            Android.Graphics.Rect rect = new Android.Graphics.Rect();
            Window.DecorView.GetWindowVisibleDisplayFrame(rect);
            JitterPhysicsGame.PreferredSize = new Vector2(rect.Width(), rect.Height());

            var game = new JitterPhysicsGame();
            var view = (View)game.Services.GetService(typeof(View));

            SetContentView(view);
            game.Run();
        }
        static void UpdateLayout(TextView textview, Element element, Android.Views.View v)
        {
            if (string.IsNullOrEmpty(textview.Text))
            {
                return;
            }

            var margin = AddText.GetMargin(element);

            margin.Left   = (int)v.Context.ToPixels(margin.Left);
            margin.Top    = (int)v.Context.ToPixels(margin.Top);
            margin.Right  = (int)v.Context.ToPixels(margin.Right);
            margin.Bottom = (int)v.Context.ToPixels(margin.Bottom);

            var textpaint = textview.Paint;
            var rect      = new Android.Graphics.Rect();

            textpaint.GetTextBounds(textview.Text, 0, textview.Text.Length, rect);

            var xPos = 0;

            if (AddText.GetHorizontalAlign(element) == Xamarin.Forms.TextAlignment.End)
            {
                xPos = v.Width - rect.Width() - textview.PaddingLeft - textview.PaddingRight - (int)margin.Right - 4;
                if (xPos < (int)margin.Left)
                {
                    xPos = (int)margin.Left;
                }
                textview.Right = v.Width - (int)margin.Right;
            }
            else
            {
                xPos           = (int)margin.Left;
                textview.Right = (int)margin.Left + rect.Width() + textview.PaddingLeft + textview.PaddingRight + 4;
                if (textview.Right >= v.Width)
                {
                    textview.Right = v.Width - (int)margin.Right;
                }
            }

            textview.Left = xPos;


            var fm     = textpaint.GetFontMetrics();
            var height = (int)(Math.Abs(fm.Top) + fm.Bottom + textview.PaddingTop + textview.PaddingEnd);
            var yPos   = AddText.GetVerticalAlign(element) == Xamarin.Forms.TextAlignment.Start ? 0 + (int)margin.Top : v.Height - height - (int)margin.Bottom;

            textview.Top    = yPos;
            textview.Bottom = yPos + height;
        }
Пример #26
0
            // In OnLayoutChange, decide size and position of child element.
            // For some reason, in layout that was added to container, it does not work all gravity options and all layout options.
            public void OnLayoutChange(Android.Views.View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom)
            {
                if (string.IsNullOrEmpty(_textview.Text))
                {
                    return;
                }

                var margin = AddText.GetMargin(_element);

                margin.Left   = (int)Forms.Context.ToPixels(margin.Left);
                margin.Top    = (int)Forms.Context.ToPixels(margin.Top);
                margin.Right  = (int)Forms.Context.ToPixels(margin.Right);
                margin.Bottom = (int)Forms.Context.ToPixels(margin.Bottom);

                var textpaint = _textview.Paint;
                var rect      = new Android.Graphics.Rect();

                textpaint.GetTextBounds(_textview.Text, 0, _textview.Text.Length, rect);

                var xPos = 0;

                if (AddText.GetHorizontalAlign(_element) == Xamarin.Forms.TextAlignment.End)
                {
                    xPos = v.Width - rect.Width() - _textview.PaddingLeft - _textview.PaddingRight - (int)margin.Right - 4;
                    if (xPos < (int)margin.Left)
                    {
                        xPos = (int)margin.Left;
                    }
                    _textview.Right = v.Width - (int)margin.Right;
                }
                else
                {
                    xPos            = (int)margin.Left;
                    _textview.Right = (int)margin.Left + rect.Width() + _textview.PaddingLeft + _textview.PaddingRight + 4;
                    if (_textview.Right >= v.Width)
                    {
                        _textview.Right = v.Width - (int)margin.Right;
                    }
                }

                _textview.Left = xPos;


                var fm     = textpaint.GetFontMetrics();
                var height = (int)(Math.Abs(fm.Top) + fm.Bottom + _textview.PaddingTop + _textview.PaddingEnd);
                var yPos   = AddText.GetVerticalAlign(_element) == Xamarin.Forms.TextAlignment.Start ? 0 + (int)margin.Top : v.Height - height - (int)margin.Bottom;

                _textview.Top    = yPos;
                _textview.Bottom = yPos + height;
            }
Пример #27
0
        public Size MeasureString(string text, Font font)
        {
            APaint.TextSize = APixels(font.Size);
            APaint.SetTypeface(Android.Graphics.Typeface.Default);//TODO
            APaint.SetStyle(Android.Graphics.Paint.Style.Stroke);
            var fm     = APaint.GetFontMetricsInt();
            var bounds = new Android.Graphics.Rect();

            APaint.GetTextBounds(text, 0, text.Length, bounds);
            var width  = bounds.Width();
            var height = -fm.Top + fm.Bottom;

            fm.Dispose();
            bounds.Dispose();
            return(new Size(width, height));
        }
Пример #28
0
        public void PlatformToSystem()
        {
#if __IOS__
            var platform = new CoreGraphics.CGRect(x, y, width, height);
#elif __ANDROID__
            var platform = new Android.Graphics.Rect(x, y, x + width, y + height);
#else
            var platform = new Windows.Foundation.Rect(x, y, width, height);
#endif
            var system = platform.ToSystemRectangle();

            Assert.Equal(x, system.X);
            Assert.Equal(y, system.Y);
            Assert.Equal(width, system.Width);
            Assert.Equal(height, system.Height);
        }
Пример #29
0
        public override bool RequestChildRectangleOnScreen(View child, Android.Graphics.Rect rectangle, bool immediate)
        {
            int screen = IndexOfChild(child);

            if (mIgnoreChildFocusRequests && !mScroller.IsFinished)
            {
                Log.Warn(TAG, "Ignoring child focus request: request " + mCurrentScreen + " -> " + screen);
                return(false);
            }
            if (screen != mCurrentScreen || !mScroller.IsFinished)
            {
                SnapToScreen(screen);
                return(true);
            }
            return(false);
        }
Пример #30
0
        ARect GetViewRect(int index)
        {
            var holder = _recyclerView.FindViewHolderForAdapterPosition(index);
            var view   = holder?.ItemView;

            if (view == null)
            {
                return(null);
            }

            var viewRect = new ARect();

            view.GetGlobalVisibleRect(viewRect);

            return(viewRect);
        }
Пример #31
0
        private int GetCharacterIndexAtPoint(Point point)
        {
            point.X -= LogicalToPhysicalPixels(Padding.Left);
            point.Y -= LogicalToPhysicalPixels(Padding.Top);
            var layout = _arrangeLayout.Layout;
            var rect   = new Android.Graphics.Rect(0, 0, layout.Width, layout.Height);

            if (rect.Contains((int)point.X, (int)point.Y))
            {
                int line   = layout.GetLineForVertical((int)point.Y);
                int offset = layout.GetOffsetForHorizontal(line, (int)point.X);

                return(offset);
            }

            return(-1);
        }
Пример #32
0
 public void DrawImage(Image image, int x, int y, Rectangle source, GraphicsUnit gu)
 {
     Flush();
     APaint.Flags = (Android.Graphics.PaintFlags)0;
     var sa = source.ToA();
     var da = new Android.Graphics.Rect(x,y, x+source.Width, y+source.Height);
     ACanvas.DrawBitmap((image as Bitmap).ABitmap, sa, da, APaint);
     da.Dispose();
     sa.Dispose();
 }
Пример #33
0
        public void DrawImage(Image image, Rectangle to, int fromx, int fromy, int fromw, int fromh, GraphicsUnit gu, ImageAttributes ia)
        {
            Flush();

            APaint.Flags = (Android.Graphics.PaintFlags)0;
            var sa = new Android.Graphics.Rect(fromx, fromy, fromx+fromw, fromy+fromh);
            var da = to.ToA();

            Android.Graphics.Paint p = null;
            Android.Graphics.ColorMatrixColorFilter cmf = null;
            if (ia != null && ia.GetColorMatrix() != null){
                p = new Android.Graphics.Paint(APaint);
                var values = ia.GetColorMatrix().Matrix;
                float[] v2 = values[0].Concat(values[1]).Concat(values[2]).Concat(values[3]).ToArray();
                cmf = new Android.Graphics.ColorMatrixColorFilter(v2);
                p.SetColorFilter(cmf);
            }
            ACanvas.DrawBitmap((image as Bitmap).ABitmap, sa, da, p == null ? APaint : p);
            if (p != null) p.Dispose();
            if (cmf != null) cmf.Dispose();
            da.Dispose();
            sa.Dispose();
        }
Пример #34
0
 public Size MeasureString(string text, Font font)
 {
     APaint.TextSize = APixels(font.Size);
     APaint.SetTypeface(Android.Graphics.Typeface.Default);//TODO
     APaint.SetStyle(Android.Graphics.Paint.Style.Stroke);
     var fm = APaint.GetFontMetricsInt();
     var bounds = new Android.Graphics.Rect();
     APaint.GetTextBounds(text, 0, text.Length, bounds);
     var width = bounds.Width();
     var height = -fm.Top + fm.Bottom;
     fm.Dispose();
     bounds.Dispose();
     return new Size(width, height);
 }
Пример #35
0
        protected virtual void CreateGraphicBuffers()
        {
            var Control  = this;
            if (Control.offBmp == null && this.AndroidView != null){
                offBmpWidth = (int)(AndroidView.MeasuredWidth/DownScale);
                offBmpHeight = (int)(AndroidView.MeasuredHeight/DownScale);

                if (offBmpWidth > 0 && offBmpHeight > 0)
                {
                    Control.offBmp = new Bitmap(offBmpWidth, offBmpHeight);
                    Control.offGr = new Graphics(Control.offBmp);
                }
                srect = new Android.Graphics.Rect(0,0, offBmpWidth, offBmpHeight);
                drect = new Android.Graphics.Rect(0,0, AndroidView.MeasuredWidth, AndroidView.MeasuredHeight);
            }
        }
Пример #36
0
        protected virtual Thickness GetNativePadding()
        {
            if (this.NativeUIElement.Background == null)
            {
                return new Thickness(0);
            }

            Android.Graphics.Rect rect = new Android.Graphics.Rect();
            this.NativeUIElement.Background.GetPadding(rect);

            Thickness absoluteNativePadding = new Thickness();
            absoluteNativePadding.Left = rect.Left + (this.NativeUIElement.Background.MinimumWidth - rect.Left - rect.Right) / 2.0;
            absoluteNativePadding.Top = rect.Top + (this.NativeUIElement.Background.MinimumHeight - rect.Top - rect.Bottom) / 2.0;
            absoluteNativePadding.Right = rect.Right + (this.NativeUIElement.Background.MinimumWidth - rect.Left - rect.Right) / 2.0;
            absoluteNativePadding.Bottom = rect.Bottom + (this.NativeUIElement.Background.MinimumHeight - rect.Top - rect.Bottom) / 2.0;

            Thickness dpiNativePadding = new Thickness();
            dpiNativePadding.Left = ScreenProperties.ConvertPixelsToDPI((float)absoluteNativePadding.Left);
            dpiNativePadding.Top = ScreenProperties.ConvertPixelsToDPI((float)absoluteNativePadding.Top);
            dpiNativePadding.Right = ScreenProperties.ConvertPixelsToDPI((float)absoluteNativePadding.Right);
            dpiNativePadding.Bottom = ScreenProperties.ConvertPixelsToDPI((float)absoluteNativePadding.Bottom);

            return dpiNativePadding;
        }