Вы можете реализовать интерфейс View.IOnTouchListener
и применить его в качестве прослушивателя к своему представлению (в данном случае ImageView
):
Реализация View.IOnTouchListener:
Примечание: Использование Java.Lang.Object в качестве базового класса в этом примере, но вы можете использовать любой класс Java.Lang.Object
(Activity и т. Д.) *
public class MyTouch : Java.Lang.Object, View.IOnTouchListener
{
TimeSpan Milli10 = TimeSpan.FromMilliseconds(10);
DateTime oldTime;
public bool OnTouch(View v, MotionEvent e)
{
switch (e.Action)
{
case MotionEventActions.Down:
oldTime = DateTime.Now;
break;
case MotionEventActions.Move:
if (DateTime.Now.Subtract(oldTime) > Milli10)
{
Console.WriteLine($"Touch {e.RawX} : {e.RawY} : tD: {DateTime.Now.Subtract(oldTime)}");
oldTime = DateTime.Now;
}
break;
default:
break;
}
return true;
}
}
Затем просто скопируйте слушателя, если это необходимо, и примените его как OnTouchListener
:
imageView = FindViewById<ImageView>(Resource.Id.background);
touch = new MyTouch();
imageView.SetOnTouchListener(touch);
Обновление:
Необходимо добавить LongPress, DoubleTap и т. Д. ..., подкласс GestureDetector.SimpleOnGestureListener
и добавить его в качестве внутреннего класса в вашу реализацию View.IOnTouchListener (это только один из способов ...)
View.IOnTouchListener PLUS SimpleOnGestureListener:
public class MyTouchPlusGestures : Java.Lang.Object, View.IOnTouchListener
{
readonly MyGestures myGestures = new MyGestures();
readonly TimeSpan Milli10 = TimeSpan.FromMilliseconds(10);
readonly GestureDetector gestureDetector;
DateTime oldTime = DateTime.Now;
internal class MyGestures : GestureDetector.SimpleOnGestureListener
{
public override void OnLongPress(MotionEvent e)
{
// do something with press
base.OnLongPress(e);
}
public override bool OnDoubleTap(MotionEvent e)
{
// do something with tap
return base.OnDoubleTap(e);
}
}
public MyTouchPlusGestures(View view)
{
gestureDetector = new GestureDetector(view.Context, myGestures);
view.SetOnTouchListener(this);
}
public bool OnTouch(View v, MotionEvent e)
{
if (!gestureDetector.OnTouchEvent(e))
{
// If the event is not handled in one of your gestures,
// fall through to the MotionEventActions switch.
switch (e.Action)
{
case MotionEventActions.Down:
oldTime = DateTime.Now;
break;
case MotionEventActions.Move:
if (DateTime.Now.Subtract(oldTime) > Milli10)
{
Console.WriteLine($"Touch {e.RawX} : {e.RawY} : tD: {DateTime.Now.Subtract(oldTime)}");
oldTime = DateTime.Now;
}
break;
default:
break;
}
}
return true;
}
}
Теперь просто передайте View вашему экземпляру MyTouchPlusGestures
, и слушатель жестов и касаний назначен вам ...
imageView = FindViewById<ImageView>(Resource.Id.background);
touch = new MyTouchPlusGestures(imageView);