Xamarin GestureRecognizer во время проведения - PullRequest
0 голосов
/ 11 июля 2019

У меня есть распознаватель жестов кадра с распознавателем жестов касания. Всякий раз, когда я нажимаю на рамку и отпускаю, что-то происходит. Тем не менее, я хочу, чтобы что-то произошло, когда я удерживаю рамку.

Я хочу уменьшить масштаб кадра всякий раз, когда я его удерживаю (например, анимация щелчка), и хочу уменьшить его при отпускании. С распознавателем жестов касания мне кажется, что я могу что-то сделать, только когда отпущу палец от рамки.

В данный момент я использую этот код:

XAML

<Frame.GestureRecognizers>
       <TapGestureRecognizer Tapped="Voeding_Tapped" />
</Frame.GestureRecognizers>

C #

void Info_Clicked(object sender, EventArgs e)
{
    frame.ScaleTo(0.9, 100);
}

С этим кодом рамка уменьшается при каждом нажатии и отпускании рамки. Как сделать так, чтобы при нажатии на рамку она уменьшалась, а когда я отпускала, уменьшалась?

1 Ответ

0 голосов
/ 12 июля 2019

Вот пример того, как не использовать пользовательские жесты, просто используя Составные анимации следующим образом:

C #

async void Info_Clicked(object sender, EventArgs e)
{
    await frame.ScaleTo(0.9, 2000);
    await frame.ScaleTo(1, 2000);
}

================================= Update =====================================

При необходимости Длинные нажатия Жесты, Создание пользовательского Рамка :

public class FrameWithLongPress : Frame
{
    public EventHandler LongPressActivated;

    public void HandleLongPress(object sender, EventArgs e)
    {
        //Handle LongPressActivated Event
    }
}

Android , настройка FrameRenderer (LongPressGestureRecognizerFrameRenderer):

[assembly: ExportRenderer(typeof(FrameWithLongPress), typeof(LongPressGestureRecognizerFrameRenderer))]
// FrameWithLongPress is created custom frame name in forms, LongPressGestureRecognizerFrameRenderer is renderer name
public class LongPressGestureRecognizerFrameRenderer : FrameRenderer
{
    FrameWithLongPress view;

    [Obsolete]
    public LongPressGestureRecognizerFrameRenderer()
    {
        this.LongClick += async (sender, args) => {
            Toast.MakeText(this.Context, "Long press is activated.", ToastLength.Short).Show();
            await view.ScaleTo(0.9, 2000);
            await view.ScaleTo(1, 2000);
        };
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
    {
        base.OnElementChanged(e);

        if (e.NewElement != null)
        {
            view = e.NewElement as FrameWithLongPress;
        }
    }
}

IOS , LongPressGestureRecognizerFrameRenderer:

[assembly: ExportRenderer(typeof(FrameWithLongPress), typeof(LongPressGestureRecognizerFrameRenderer))]
// FrameWithLongPress is created custom frame name in forms, LongPressGestureRecognizerFrameRenderer is renderer name
public class LongPressGestureRecognizerFrameRenderer : FrameRenderer
{
    FrameWithLongPress view;
    public LongPressGestureRecognizerFrameRenderer()
    {
        UILongPressGestureRecognizer uiLongPressGesture = new UILongPressGestureRecognizer(new Action(async () => {
            await view.ScaleTo(0.9, 2000);
            await view.ScaleTo(1, 2000);
        }));
        this.AddGestureRecognizer(uiLongPressGesture);
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
    {
        base.OnElementChanged(e);

        if (e.NewElement != null)
        {
            view = e.NewElement as FrameWithLongPress;
        }
    }
}

XAML* используя пользовательскую рамку:

<local:FrameWithLongPress WidthRequest="300" HeightRequest="100" BackgroundColor="BlueViolet"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...