[英]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.