У меня есть приложение в Xamarin Forms, и мне нужно, чтобы пользователь мог выбрать одно изображение снизу и перетащить его куда угодно в виде сверху, идея такова: вид ниже с изображениями - это домашние комнаты, а вид сверху это комнатное растение, пользователь может создать свое комнатное растение, перетаскивая и вращая изображения, а затем, наконец, сохранить вид сверху как изображение jpg или png.
Я искал здесь и на 2 3 страницах Google о перетаскивании и т. д., Но я не нашел ничего, что могло бы мне помочь с этим, я попробовал жест панорамирования, жест касания, но безуспешно = [
Извините, если он дублируется или что-то в этом роде, это мой первый пост, и я действительно ничего не нашел.
Как я могу заставить это работать в Xamarin.Forms или, по крайней мере, с настраиваемыми рендерерами и т. д.?
Спасибо вам, ребята.
@ G.hakim, да, я тоже так думаю ... = [, может быть, если у меня будет основной вид, а потом 2 дочерних (нижний и верхний), а потом, когда пользователь коснется изображения в нижнем представлении, я могу отсоединить и вставьте основной вид, я не знаю = [, я думаю, что в данный момент я не могу это сделать
Вы не найдете для этого готовой вещи, но это, безусловно, можно сделать без проблем, если у вас есть время.





Для вашего изображения в XAML:
<Image Source = "plant.png" x:Name = "image"/>
На самом деле вы можете использовать распознаватели жестов панорамирования для перетаскивания изображений в C#:
Определите переменные:
double x; // totalX for the pan gesture
double y; // totalY for the pan gesture
Инициализируйте жест панорамирования и добавьте его к изображению:
PanGestureRecognizer panGesture = new PanGestureRecognizer();
panGesture.PanUpdated += PanUpdated;
image.GestureRecognizers.Add(panGesture);
Обработчик события для жеста:
void PanUpdated(object sender, PanUpdatedEventArgs args)
{
if (args.StatusType.Equals(GestureStatus.Running)) {
x = args.TotalX;
y = args.TotalY;
image.TranslateTo(x, y, 1);
}
else if (args.StatusType.Equals(GestureStatus.Completed)) {
// set the layout bounds of the image to the new position
// method varies depending on what type of layout you are using for the image
// eg. assume the image is in an absolute layout
// where the layout height is the screen height
// and the layout width is the screen width
Task.Run(() => {
Device.BeginInvokeOnMainThread(async () => // run UI task on main thread
{
await Task.Delay(50); // avoid flickering
var screenWidth = Application.Current.MainPage.Width;
var screenHeight = Application.Current.MainPage.Height;
var b = image.Bounds;
var newBounds = new Rectangle(b.X + x, b.Y + y, b.Width, b.Height);
var newAbsoluteBound =
new Rectangle(newBounds.X / (screenWidth - newBounds.Width),
newBounds.Y / (screenHeight - newBounds.Height),
newBounds.Width / screenWidth,
newBounds.Height / screenHeight);
// set new absolute bounds so a new TranslateTo can be applied
AbsoluteLayout.SetLayoutBounds(image, newAbsoluteBound);
await image.TranslateTo(0, 0, 0);
});
});
}
}
Спасибо за быстрый ответ, попробую, а как насчет Views? Я имею в виду, что мой вид снизу, где пользователь выберет изображение, вероятно, будет сеткой / прокруткой, а вид сверху будет абсолютным / стеком, нужно ли мне отсоединять изображение от сетки / прокрутки, когда пользователь нажимает?
Вероятно, вам придется отсоединить и добавить его в новый вид, когда вы отпустите изображение
Да ... Я попробую это и дам вам знать, спасибо за внимание, я думаю, что в данный момент в Xamarin будет сложно
Убедитесь, что ваша страница или изображение не находится в scrollView. Если ScrollView включен для обеих ориентаций, Pan-Gesture работать не будет. . .
Что ж, я сомневаюсь, что эти изображения можно перемещать где угодно в верхней части экрана.