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

本文关键字:setOnTouchListener Xamarin | 更新日期: 2023-09-27 18:17:13

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

我尝试过这样,但我带来了一些错误。

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

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

您可以使用 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 事件时,这显然不需要(。

public class MyTouchListener 
    : Java.Lang.Object
    , View.IOnTouchListener
{
    public bool OnTouch(View v, MotionEvent e)
    {
        if (e.Action == MotionEventActions.Down)
        {
            // do stuff
            return true;
        }
        if (e.Action == MotionEventActions.Up)
        {
            // do other stuff
            return true;
        }
        return false;
    }
}

然后设置它:

button1.SetOnTouchListener(new MyTouchListener());

注意 使用后一种方法还需要处理对要在 OnTouchListener 类中修改的对象的引用传递,C# 事件不需要这样做。

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

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

button1.Touch += OnButtonTouched;

并记得解开它:

button1.Touch -= OnButtonTouched;
private Button Button1;
@Override
public void onCreate(Bundle savedInstanceState)
{       
    super.onCreate(savedInstanceState);
    Button1.setOnTouchListener(new OnTouchListener()
    {
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            if (event.getAction() == MotionEvent.ACTION_DOWN)
            {
                //do stuff
            }
            else if (event.getAction() == MotionEvent.ACTION_UP)
            {
                // do stuff
            }
            return false;
        }
    });
}

从您提出的另一个问题来看,我猜您需要将 onTouch 侦听器移动到 onCreate 方法中

相关文章:
  • 没有找到相关文章