Я новичок в 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;
}