Белый экран, когда я делал снимок экрана на Android с помощью Mapsui

Я использую mapsui для отображения карты IGN в моем приложении, и я хочу сделать снимок экрана карты, когда я нажимаю определенную кнопку. Поэтому я использую внедрение зависимостей, и он отлично работает в UWP. Но с Android я не могу отображать карту и у меня белый экран. Вот мой код для Android:

public Task<byte[]> TakeShot()
    {
        var _activity = CrossCurrentActivity.Current;
        if (_activity == null)
        {
            throw new Exception("You have to set ScreenshotManager.Activity in your Android project");
        }

        var view = _activity.Activity.Window.DecorView;
        view.DrawingCacheEnabled = true;

        Bitmap bitmap = view.GetDrawingCache(true);
        view.BuildDrawingCache();

        byte[] bitmapData;

        using (var stream = new MemoryStream())
        {
            bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
            bitmapData = stream.ToArray();
        }

        return Task.FromResult(bitmapData);
    }

Только карта пуста, потому что у меня есть кнопка на изображении. Спасибо за вашу помощь

1 ответ

Я использовал Mapsui, затем я создаю функцию снимка экрана с помощью службы зависимости. Вот мой GIF, когда я делаю снимок экрана.

Вот моя услуга по получению скриншота.

[assembly: Dependency(typeof(ScreenshotService))]
namespace MVVMDataBinding.Droid
{
 public class ScreenshotService : IScreenshotService
 {

    public byte[] Capture()
    {

       var _activity = CrossCurrentActivity.Current;

        var rootView = _activity.Activity.Window.DecorView;

        using (var screenshot = Bitmap.CreateBitmap(
                                rootView.Width,
                                rootView.Height,
                                Bitmap.Config.Argb8888))
        {
            var canvas = new Canvas(screenshot);
            rootView.Draw(canvas);

            using (var stream = new MemoryStream())
            {
                screenshot.Compress(Bitmap.CompressFormat.Png, 90, stream);
                return stream.ToArray();
            }
        }
    }
   }
}

И создаем интерфейс IScreenshotService в формах xamarin.

   public interface IScreenshotService
{
    byte[] Capture();
}

Используйте его в формах xamarin.

private void Button_Clicked(object sender, EventArgs e)
    {
        var screenshotData = DependencyService.Get<IScreenshotService>().Capture();
        myImage.Source=ImageSource.FromStream(() => new 
        MemoryStream((byte[])screenshotData));
    }

внешний код.

  <ContentPage.Content>
    <StackLayout>
    <Grid x:Name="ContentGrid"  WidthRequest="100" HeightRequest="200" />

    <Button Text="Take a screen" Clicked="Button_Clicked"/>

    <Image x:Name="myImage" WidthRequest="200" HeightRequest="300"/>
    </StackLayout>
</ContentPage.Content>

Вот моя демонстрация.

https://github.com/851265601/MapsuiWithScreenshotDemo

Другие вопросы по тегам