Я пытаюсь добавить длинные сенсорные жесты в свое приложение xamarin. У меня есть вид, где касание приводит к экрану редактирования, а долгое касание открывает меню параметров. Я следовал этому руководству по SO по реализации такой вещи. Элемент, который я хочу долго касаться, - это Frame
, поэтому я написал расширение для Frame
. Вот этот класс:
public class FrameWithLongTouchGesture : Frame
{
public FrameWithLongTouchGesture()
{
}
public EventHandler LongPressActivated;
public void HandleLongPress(object sender, EventArgs e)
{
//Handle LongPressActivated Event
EventHandler eventHandler = this.LongPressActivated;
eventHandler?.Invoke((object)this, EventArgs.Empty);
}
}
Как видите, я добавил к этому объекту обработчик событий. Затем я приступил к реализации настраиваемого средства визуализации для каждой платформы, я начал с iOS (поскольку я разработчик iOS). Сработало абсолютно без проблем, потребовалось 5 минут, чтобы приступить к работе. Итак, теперь я пришел к Android, это должно быть еще проще, поскольку сообщение, на которое я ссылался ранее, показывает вам, как реализовать средство визуализации в Android ... отлично! ....
Не очень хорошо :( Никакое длинное событие касания не обрабатывается ВООБЩЕ с точным кодом в сообщении. Я установил точки останова, попытался записать в консоль, но обработчик событий жестов никогда не запускается. Я даже вижу, что телефон получает событие касания, потому что оно выводится на консоль, когда я запускаю его на своем тестовом устройстве. Я абсолютно не понимаю, почему Android не позволяет мне распознать этот жест, я также играл с андроидами GestureDetector
, но это тоже не сработало. Вот мой рендерер Android:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Diagnostics;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using Android.Content;
using Android.Views;
using Android.Widget;
using LongTouchGestureDemo;
using LongTouchGestureDemo.Droid;
[assembly: ExportRenderer(typeof(FrameWithLongTouchGesture), typeof(FrameWithLongTouchGestureRenderer))]
namespace LongTouchGestureDemo.Droid
{
public class FrameWithLongTouchGestureRenderer : FrameRenderer
{
FrameWithLongTouchGesture view;
//GestureDetector gesture;
public FrameWithLongTouchGestureRenderer(Context context) : base(context)
{
//gesture = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener());
this.LongClick += (object sender, LongClickEventArgs e) => {
view.HandleLongPress(sender, e);
};
}
protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
view = e.NewElement as FrameWithLongTouchGesture;
}
}
}
}
Это действительно расстраивает, потому что я не могу реализовать основные функции в приложении для Android. Не помогает то, что у меня нет опыта разработки android, к сожалению, реализовать жесты в droid не так просто, как в iOS: /
Любая помощь и предложения приветствуются! Спасибо