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

嗨,大家可以给我一个在C#中的setOnTouchListener的例子吗? 我尝试了这样,但我带来一些错误。

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

Solutions Collecting From Web of "如何在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.Objectinheritance,因为我们需要处理故事的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#事件不是必需的。

 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方法中