Xamarin Forms перетаскивает изображение между представлениями

У меня есть приложение в Xamarin Forms, и мне нужно, чтобы пользователь мог выбрать одно изображение снизу и перетащить его куда угодно в виде сверху, идея такова: вид ниже с изображениями - это домашние комнаты, а вид сверху это комнатное растение, пользователь может создать свое комнатное растение, перетаскивая и вращая изображения, а затем, наконец, сохранить вид сверху как изображение jpg или png.

Я искал здесь и на 2 3 страницах Google о перетаскивании и т. д., Но я не нашел ничего, что могло бы мне помочь с этим, я попробовал жест панорамирования, жест касания, но безуспешно = [

Извините, если он дублируется или что-то в этом роде, это мой первый пост, и я действительно ничего не нашел.

Как я могу заставить это работать в Xamarin.Forms или, по крайней мере, с настраиваемыми рендерерами и т. д.?

Спасибо вам, ребята.

Образец изображения того, что мне нужно

Что ж, я сомневаюсь, что эти изображения можно перемещать где угодно в верхней части экрана.

FreakyAli 27.03.2018 21:43

@ G.hakim, да, я тоже так думаю ... = [, может быть, если у меня будет основной вид, а потом 2 дочерних (нижний и верхний), а потом, когда пользователь коснется изображения в нижнем представлении, я могу отсоединить и вставьте основной вид, я не знаю = [, я думаю, что в данный момент я не могу это сделать

Marcio E. H 02.04.2018 12:45

Вы не найдете для этого готовой вещи, но это, безусловно, можно сделать без проблем, если у вас есть время.

FreakyAli 02.04.2018 12:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
1 609
2

Ответы 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? Я имею в виду, что мой вид снизу, где пользователь выберет изображение, вероятно, будет сеткой / прокруткой, а вид сверху будет абсолютным / стеком, нужно ли мне отсоединять изображение от сетки / прокрутки, когда пользователь нажимает?

Marcio E. H 29.03.2018 12:33

Вероятно, вам придется отсоединить и добавить его в новый вид, когда вы отпустите изображение

Patrick 29.03.2018 15:03

Да ... Я попробую это и дам вам знать, спасибо за внимание, я думаю, что в данный момент в Xamarin будет сложно

Marcio E. H 02.04.2018 12:46

Убедитесь, что ваша страница или изображение не находится в scrollView. Если ScrollView включен для обеих ориентаций, Pan-Gesture работать не будет. . .

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