[英]How to use setOnTouchListener in C# (Xamarin)?
你能给我一个 C# 中 setOnTouchListener 的例子吗?
我试过这样,但我带来了一些错误。
Button1.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View arg0, MotionEvent arg1)
{
x.Text = "1";
}
});
你要么使用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# 事件OnTouchListener
。
编辑:作为旁注,如果您使用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 方法中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.