自定义渲染器中的触摸事件 [XAMARIN]

发布于 2025-01-16 02:03:41 字数 1576 浏览 0 评论 0原文

我正在重写 Xamarin 内置的 OnTouchEvent。我需要用户创建的坐标和操作。仅当我在屏幕上移动手指时,它才能正确发出“移动”和“向上”操作。

然而,它并没有: 1,发射任何东西,如果我不移动手指,只点击一次(应该是1次向下和1次向上事件)。 2、当我移动手指时发出向下动作。

XAML:

<renderers:CustomCollectionView
                                x:Name="ListItemsContaner"
                                IsGrouped="True"
                                ItemsSource="{Binding GroupedItems}">
                        <CollectionView.GestureRecognizers>
                            <TapGestureRecognizer NumberOfTapsRequired="1" Tapped="OnClicked"></TapGestureRecognizer>
                        </CollectionView.GestureRecognizers>
    
                            ...
                            
                        </renderers:CustomCollectionView>

这是渲染器的代码

using Android.Views;
using AppTourism.Droid.Renderers;
using AppTourism.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(CustomCollectionView), typeof(CustomCollectionViewRenderer))]
namespace AppTourism.Droid.Renderers
{
    public class CustomCollectionViewRenderer : CollectionViewRenderer, ICustomCollectionViewRenderer
    {
        public CustomCollectionViewRenderer(Android.Content.Context context) : base(context) { }


        public override bool OnTouchEvent(MotionEvent e)
        {
            System.Console.WriteLine(e.Action);
            System.Console.WriteLine(e.RawX + " " + e.RawY);
            return base.OnTouchEvent(e);
        }

        
    }
}

I am overriding Xamarin's built in OnTouchEvent. I need the coordinates and the actions, the user creates. It properly emits Move, and Up actions, only if I move my finger on the screen.

It does not however:
1, emit anything, if I don't move my finger, only tap once (should be 1 Down and 1 Up event).
2, emit Down action, when I move my finger.

The XAML:

<renderers:CustomCollectionView
                                x:Name="ListItemsContaner"
                                IsGrouped="True"
                                ItemsSource="{Binding GroupedItems}">
                        <CollectionView.GestureRecognizers>
                            <TapGestureRecognizer NumberOfTapsRequired="1" Tapped="OnClicked"></TapGestureRecognizer>
                        </CollectionView.GestureRecognizers>
    
                            ...
                            
                        </renderers:CustomCollectionView>

Here's the renderer's code

using Android.Views;
using AppTourism.Droid.Renderers;
using AppTourism.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(CustomCollectionView), typeof(CustomCollectionViewRenderer))]
namespace AppTourism.Droid.Renderers
{
    public class CustomCollectionViewRenderer : CollectionViewRenderer, ICustomCollectionViewRenderer
    {
        public CustomCollectionViewRenderer(Android.Content.Context context) : base(context) { }


        public override bool OnTouchEvent(MotionEvent e)
        {
            System.Console.WriteLine(e.Action);
            System.Console.WriteLine(e.RawX + " " + e.RawY);
            return base.OnTouchEvent(e);
        }

        
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凝望流年 2025-01-23 02:03:41

这似乎不仅在 CollectionView 上存在错误,而且在 xamarin 中的其他视图上也存在错误,就像这个问题所说:

https://github.com/xamarin/Xamarin.Forms/issues/7159

解决方法是使用 TapGestureRecognizer 代替:

<CollectionView.GestureRecognizers>
                <TapGestureRecognizer NumberOfTapsRequired="1" Tapped="OnClicked"></TapGestureRecognizer>
            </CollectionView.GestureRecognizers>

编辑:

您可以覆盖 DispatchTouchEvent

 public override bool DispatchTouchEvent(MotionEvent e)
        {System.Console.WriteLine(e.Action);
            System.Console.WriteLine(e.RawX + " " + e.RawY);
            return base.DispatchTouchEvent(e);}

在此处输入图像描述

It seems a bug on not only collectionview but also other views in xamarin, like this issue said:

https://github.com/xamarin/Xamarin.Forms/issues/7159

The workaround is use TapGestureRecognizer instead:

<CollectionView.GestureRecognizers>
                <TapGestureRecognizer NumberOfTapsRequired="1" Tapped="OnClicked"></TapGestureRecognizer>
            </CollectionView.GestureRecognizers>

EDIT:

You can override the DispatchTouchEvent

 public override bool DispatchTouchEvent(MotionEvent e)
        {System.Console.WriteLine(e.Action);
            System.Console.WriteLine(e.RawX + " " + e.RawY);
            return base.DispatchTouchEvent(e);}

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文