Снимок экрана Xamarin.Forms - PullRequest
       9

Снимок экрана Xamarin.Forms

0 голосов
/ 03 сентября 2018

У меня есть следующий код Xaml:

<StackLayout>
        <Button Text="Take a picture" Clicked="Button_Clicked_1" />
        <Grid x:Name="MainPageBluePrintGrid" BackgroundColor="BlueViolet" HeightRequest="100">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>

            <Label Text="A" Grid.Row="0" Grid.Column="0"/>
            <Label Text="B" Grid.Row="0" Grid.Column="1"/>
            <Label Text="C" Grid.Row="0" Grid.Column="2"/>

            <Image x:Name="image1" Grid.Row="1" Grid.Column="0"/>
            <Image x:Name="image2" Grid.Row="1" Grid.Column="1"/>
            <Image x:Name="image3" Grid.Row="1" Grid.Column="2"/>
        </Grid>


        <StackLayout BackgroundColor="BurlyWood">
            <Image x:Name="CapturedImage"/>
        </StackLayout>
    </StackLayout>        

Второй ряд - это изображения, которые выбирает пользователь. Можно ли сделать скриншот только второй строки GridView и отобразить его в <Image x:Name="CapturedImage"/>. У меня есть поиск, как это сделать, но я наткнулся только на полноэкранный снимок, который в моем случае не идеален.

1 Ответ

0 голосов
/ 05 сентября 2018

Похоже, вы хотите создать снимок определенного Xamarin.Forms.View. Вы должны обернуть 2-й Grid.Row одним верхним уровнем View, который будет содержать изображения как дочерние. После этого вы можете использовать возможности платформы для создания снимка.

Android

public void MakeViewShot(Xamarin.Forms.View view)
{
    var nativeView = view.GetRenderer().View;
    var wasDrawingCacheEnabled = nativeView.DrawingCacheEnabled;
    nativeView.DrawingCacheEnabled = true;
    nativeView.BuildDrawingCache(false);
    var bitmap = nativeView.GetDrawingCache(false);
    // TODO: Save bitmap and return filepath
    nativeView.DrawingCacheEnabled = wasDrawingCacheEnabled;
}

IOS

public void MakeViewShot(Xamarin.Forms.View view)
{
    var nativeView = Xamarin.Forms.Platform.iOS.Platform.GetRenderer(view).NativeView;
    UIGraphics.BeginImageContextWithOptions(nativeView.Bounds.Size, opaque: true, scale: 0);
    nativeView.DrawViewHierarchy(nativeView.Bounds, afterScreenUpdates: true);
    var image = UIGraphics.GetImageFromCurrentImageContext();
    UIGraphics.EndImageContext();
    // TODO: Save bitmap and return filepath
}

Пример использования:

<StackLayout
    x:Name="secondRow"
    Grid.Row="1">
    <Image x:Name="image1" />
    <Image x:Name="image2" />
    <Image x:Name="image3" />
</StackLayout>

MakeViewShot(secondRow);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...