Создание галереи на основе фотографий, сделанных Xam.Plugin.Media - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в Xamarin.forms и c # и разработке приложений.В настоящее время я работаю над приложением, которое делает снимки, а затем вы можете отправить их на сервер, чтобы вы могли проверить их в WebApp.Я работаю с Xamarin.Forms.

Дело в том, что я схожу с ума, пытаясь создать галерею с фотографиями, которые вы делаете .Вроде как показ изображений, сохраненных в системной папке (не в галерее по умолчанию для устройства), в виде «бесконечной сетки прокрутки + сетка 2x2».

Я был бы очень признателен, если бы кто-то указал мне верное направление или дал бы подсказку, ссылку, пример, что угодно!> <</p>

Вот как сейчас выглядит приложение:

И это моя цель:

Мой XAMLдействительно просто:

 <ScrollView>
            <StackLayout
                Margin="20">

                <Image
                    x:Name="PhotoImage" />

                <StackLayout
                    Orientation="Horizontal" >

                    <Button 
                        x:Name="CameraButton"
                        BackgroundColor="#95c241"
                        Text="Foto aufnehmen"
                        TextColor="White"
                        Clicked="CameraButton_Clicked"
                        HorizontalOptions="Start" 
                        />

                    <!--<Button
                        x:Name="selectimagebutton"
                        BackgroundColor="#4ab8ae"
                        Clicked="selectimagebutton_clicked"
                        Text="aus der gallerie"
                        TextColor="white"
                        HorizontalOptions="endandexpand" 

                        />-->

                    <Button
                        x:Name="SyncButton"
                        BackgroundColor="#95c241"
                        Clicked="SyncButton_Clicked"
                        Text="Synchronisierung"
                        TextColor="White"
                        HorizontalOptions="EndAndExpand" />

                </StackLayout>

My MainPage.xampl.cs.Я много дергал его и не знаю, может ли это быть полезным для вас:

//Camera Logic
    public async Task<bool> CheckPhotoPermissionsAsync()
    {
        var cameraStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Camera);
        var storageStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage);

        if (cameraStatus != PermissionStatus.Granted || storageStatus != PermissionStatus.Granted)
        {
            var results = await CrossPermissions.Current.RequestPermissionsAsync(new[] { Permission.Camera, Permission.Storage });
            cameraStatus = results[Permission.Camera];
            storageStatus = results[Permission.Storage];
        }

        return cameraStatus == PermissionStatus.Granted || storageStatus == PermissionStatus.Granted;
    }

        private async void CameraButton_Clicked(object sender, EventArgs e)
    {
        //Toma la foto y la muestra directamente en la pagina
        //Macht ein Foto und zeigt es auf diese Seite

        bool photoPermissions = await CheckPhotoPermissionsAsync();

        if (!photoPermissions)
        {
            await DisplayAlert("Achtung!", "Damit die App einwandfrei läuft, mussen Sie den Zulassungen zustimmen", "ok");
            return;
        }
        else
        {
            await CrossMedia.Current.Initialize();

            if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
            {
                //If camera option not available
                //Falls das Handy keine Kamera hat
                await DisplayAlert("Hmmm...!", "Das Gerät hat kein Zugriff auf die Kamera...", "ok");
                return;
            }

            var mediaFile = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions
            {
                SaveToAlbum = false,
                //Directory = "FotoApp_Folder",
                Name = fileName(),

                PhotoSize = PhotoSize.Custom,

                //SaveMetaData = false,

                //Nurr bei PhotoSize.Custom
                CustomPhotoSize = 20,
                CompressionQuality = 70,

                //Only for iOS
                AllowCropping = true

            });

            //var mediaFile = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions
            //{
            //    SaveToAlbum = false,
            //});

            //await saveScaleAsync(mediaFile);
            //Debug.WriteLine("It work baby! The mediaFile is: " + mediaFile);

            await saveMediaFile(mediaFile);

            var x = ImageSource.FromStream(() =>
            {
                var stream = mediaFile.GetStream();
                //mediaFile.Dispose();
                return stream;                                     

            });

            Debug.WriteLine("It works baby! The mediaFile is: " + mediaFile);

            //await ToBase64(mediaFile);

        }
    }

    private async Task saveMediaFile(MediaFile mediaFile)
    {
        if (mediaFile == null)
        {
            //Falls kein Bild vorhanden ist
            await DisplayAlert("Ups!", "Es gibt kein Bild vorhanden", "ok");
            return;
        }
        try
        {
            var xxx = mediaFile.Path;

            //PhotoTable ist eine Klasse in diesem Fall , die die Attribute vom DB hat.
            var s = new PhotoTable
            {
                Filename = mediaFile.Path,
                Created_At = DateTime.Now,
                Sync_At = null
            };

            await HelperDB.Instance.conn.InsertAsync(s);
            PhotoImage.Source = ImageSource.FromStream(() => mediaFile.GetStream());

        }
        catch (Exception ee)
        {
            //Falls was nicht mit dem DB klappt....
            await DisplayAlert("Ups!", "Bitte versuchen Sie das nochmal. Es gab ein problem mit dem DB" + ee.ToString(), "ok");
        }

        updateText();

    }

    public string fileName()
    {
        DateTime d = DateTime.Now;

        string fileName = $"IMAGE_{d.ToString("yyyyMMdd_HHmmss")}_.jpg";

        return fileName;
    }
...