如何在C#(Xamarin)中使用setOnTouchListener?

如何在C#(Xamarin)中使用setOnTouchListener?,c#,android,xamarin,C#,Android,Xamarin,你能给我举一个C#中setOnTouchListener的例子吗 我试着这样做,但是我犯了一些错误 Button1.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View arg0, MotionEvent arg1) { x.Text = "1"; } }); 根据您提出的另一个问题判断,我

你能给我举一个C#中setOnTouchListener的例子吗

我试着这样做,但是我犯了一些错误

Button1.setOnTouchListener(new View.OnTouchListener()
    {
        public boolean onTouch(View arg0, MotionEvent arg1)
        {
            x.Text = "1";
        }
    });

根据您提出的另一个问题判断,我猜您需要将onTouch侦听器移动到onCreate方法中。使用
Touch
事件:

button1.Touch += (s, e) =>
{
    var handled = false;
    if (e.Event.Action == MotionEventActions.Down)
    {
        // do stuff
        handled = true;
    }
    else if (e.Event.Action == MotionEventActions.Up)
    {
        // do other stuff
        handled = true;
    }

    e.Handled = handled;
};
或者您可以显式地实现
IOnTouchListener
接口(C#没有匿名类)。注意,在实现Java接口时,还需要继承
Java.Lang.Object
,因为我们需要一个Java方面的句柄(当我们使用
Touch
事件时,显然不需要这个句柄)

然后将其设置为:

button1.SetOnTouchListener(new MyTouchListener());
注意:使用后一种方法还需要处理对要在
OnTouchListener
类中修改的对象的引用传递,C#事件不需要这样做

编辑: 作为旁注,如果您使用
Touch
事件或任何其他事件,请记住做一个好公民,当您不再有兴趣接收该事件时,请将其取下。最糟糕的情况是,如果忘记取消钩住事件,则会因为无法清理实例而导致内存泄漏

因此,在第一个示例中,不要使用匿名方法:

button1.Touch += OnButtonTouched;
记得把它解开:

button1.Touch -= OnButtonTouched;

请显示错误和所有oncreate方法-编辑您的问题我已经编辑了我的答案-见上文。您可能试图直接从onCreate方法外部调用OnTuc listner,除非您将其保存在另一个仍然从OnCreateYes调用的方法中,否则这不会起作用。看起来您需要如上所述移动该方法,此外,您还直接复制了我的代码,并使用了Button1。我已将我的代码更新为使用Button1而不是ButtonCheck。您的“}”看起来要么是一对多,要么需要在某个地方添加一个,如果您仍在挣扎,请发布完整的文件。请参阅CheeseBarron上面关于继承java类的评论。考虑到您正在使用C#+1@CheeseBarronperfect的Java接口,我假设您已经完成了这项工作。。。。。。。。。!但是我注意到这里只有很少的人是大师。。lol@Cheesebaron当用户触摸某个视图的任何子视图时,是否仍然可以记录该视图的触摸view@vigneshkumar不太清楚你的意思。这可能是一个新的SO问题,有更多细节:)
button1.Touch += OnButtonTouched;
button1.Touch -= OnButtonTouched;