gpt4 book ai didi

android - ListView 内的 PanGestureRecognizer (Xamarin.Forms)

转载 作者:行者123 更新时间:2023-12-01 07:45:40 36 4
gpt4 key购买 nike

我正在 Xamarin.Forms(Android 和 iOS)中制作消息传递应用程序。

消息显示在 ListView 中。

现在我想添加一个新功能。当我将消息气球拖到一边时,它会显示消息信息。

用户按住消息,向右或向左拖动。

  • 如果他拖得足够多,就会显示一个包含信息的新页面
  • 如果他在此“阈值”之前释放,气球将弹回原位

我尝试在气球上使用 PanGestureRecognizer(在此上下文中为 PGR)实现此功能,但它部分起作用。

安卓

我可以在阈值之前拖动、释放、释放,而且很管用!但是,如果我在水平拖动的同时垂直拖动,ListView“窃取”了平移手势,PGR“忘记”了它并且不返回任何事件。所以气球只是保持在那里,稍微偏向一边。

Intially -- 初始状态。

Dragging right -- 向右拖动消息

Already released -- 我已经发布了消息,但它仍然在右边。

如果我在不向下拖动的情况下松开手指,就不会发生这种情况。

它可能看起来很明显:“当手指被“遗忘”时,你为什么不让它回去呢?
因为当问题发生时,它不会生成另一个事件。 (并且 ListView 没有 Scrolled 事件作为 ScrollView)

iOS

当我尝试使用 PGR 时,ListView 不起作用。但是侧拖有效。看起来 PGR 总是先捕获平移手势。

有没有办法让PGR和ListView同时工作?

最佳答案

对于 iOS 你可以尝试添加:

Application.Current.On<iOS>().SetPanGestureRecognizerShouldRecognizeSimultaneously(true)

引用文献:https://github.com/xamarin/Xamarin.Forms/issues/2299#issuecomment-399578363 https://learn.microsoft.com/ru-ru/xamarin/xamarin-forms/platform/ios/application-pan-gesture

对于 Android,我用计时器做了一个解决方法:

private System.Threading.Timer timer;

private void PanGesture_PanUpdated(object sender, PanUpdatedEventArgs e)
{
var statusType = e.StatusType;

if (statusType != GestureStatus.Started && timer == null)
{
// after gesture was broken down, next event will be with wrong
// status, like the gesture is continues. So, reset status to Started,
// consider it is new gesture:
statusType = GestureStatus.Started;
}

var slidingView = yourView;

switch (statusType)
{
case GestureStatus.Started:
// do any initializations..
timer = new System.Threading.Timer(_ => {
finishTranslation(slidingView);
});
break;
case GestureStatus.Running:
{
// do any animations..
timer.Change(TimeSpan.FromMilliseconds(100), TimeSpan.Zero);
}
break;
}
}

private void finishTranslation(View slidingView)
{
timer = null;
// finish your animation
}

但是点击手势的问题仍然存在((

关于android - ListView 内的 PanGestureRecognizer (Xamarin.Forms),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48689198/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com