コード例 #1
0
ファイル: CameraPreview.cs プロジェクト: matcodes/OAK
        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
ファイル: DeviceHelper.cs プロジェクト: ibebbs/UnoDuoHey
        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);
        }
コード例 #7
0
        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
ファイル: CameraPreview.cs プロジェクト: matcodes/OAK
        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
ファイル: MauiSwipeView.cs プロジェクト: josephwambura/maui
        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
ファイル: SpacingItemDecoration.cs プロジェクト: sung-su/maui
        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
ファイル: ActivityBase.cs プロジェクト: prepare/Sitana
        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
ファイル: Rectangle_Tests.cs プロジェクト: kimkulling/maui
        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();
        }
コード例 #25
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);

            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
ファイル: Rectangle_Tests.cs プロジェクト: kimkulling/maui
        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
ファイル: TextBlock.Android.cs プロジェクト: nepronen/Uno
        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
ファイル: FastGraphics.cs プロジェクト: jkl83/AndroidDrawing
 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
ファイル: FastGraphics.cs プロジェクト: jkl83/AndroidDrawing
        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
ファイル: FastGraphics.cs プロジェクト: jkl83/AndroidDrawing
 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
ファイル: DoubleBufferedControl.cs プロジェクト: cail/fleux
        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;
        }