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

时间:2014-08-09 22:22:35

标签: c# android xamarin

大家好,您能在C#中给我一个setOnTouchListener示例吗? 我试过这样但是我带来了一些错误。

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

2 个答案:

答案 0 :(得分:25)

你要么。使用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;

答案 1 :(得分:0)

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