有没有人偶然有一个使用GestureListner和Monodroid的工作示例?我似乎无法使用Java成功翻译网络上的内容。
我认为我很接近......而且我想如果我可以让这个“OnTouchEvent”开火,我可以反过来让我的GestureDetector Class'OnTouchEvent开火,然后我就可以获得滑动动作(或OnFling)。
在Activity类中触发此事件需要做什么?没有
public override bool OnTouchEvent(MotionEvent e)
{
m_gestureDetector.OnTouchEvent(e);
return base.OnTouchEvent(e);
}
我认为我绝对需要OnTouch事件而不是OnClick,因为我需要MotionEvent。
答案 0 :(得分:4)
根据OnTouchEvent的Android文档:
当任何视图未处理触摸屏事件时调用 在它下面。这对处理发生的触摸事件最有用 在窗口边界之外,没有视图可以接收它。
你确定你没有在视图中处理它吗?我猜你可能应在你的视图中处理它。
答案 1 :(得分:0)
基本上你需要在Activity上调用覆盖OnTouchEvent。我认为那是你弄错了。这是我如何做到的一个例子。希望能帮助到你。
public class Activity1 : Activity
{
private TextView displayText;
private GestureDetector gestureScanner;
private GestureListener gestureListener;
protected override void OnCreate( Bundle bundle )
{
base.OnCreate( bundle );
SetContentView( Resource.layout.main );
displayText = FindViewById<TextView>( Resource.id.textView );
gestureListener = new GestureListener( displayText );
gestureScanner = new GestureDetector( this, gestureListener );
}
public override bool OnTouchEvent( MotionEvent e )
{
return gestureScanner.OnTouchEvent( e );
}
}
public class GestureListener : GestureDetector.IOnGestureListener
{
private readonly TextView view;
private static int SWIPE_MAX_OFF_PATH = 250;
private static int SWIPE_MIN_DISTANCE = 120;
private static int SWIPE_THRESHOLD_VELOCITY = 200;
public GestureListener( TextView view )
{
this.view = view;
}
public IntPtr Handle
{
get { throw new NotImplementedException(); }
}
public bool OnDown( MotionEvent e )
{
view.Text = "- DOWN -";
return true;
}
public bool OnFling( MotionEvent e1, MotionEvent e2, float velocityX, float velocityY )
{
try
{
if ( Math.Abs( e1.GetY() - e2.GetY() ) > SWIPE_MAX_OFF_PATH )
return false;
// right to left swipe
if ( e1.GetX() - e2.GetX() > SWIPE_MIN_DISTANCE && Math.Abs( velocityX ) > SWIPE_THRESHOLD_VELOCITY )
Toast.MakeText( view.Context, "Left Swipe", ToastLength.Short ).Show();
else if ( e2.GetX() - e1.GetX() > SWIPE_MIN_DISTANCE && Math.Abs( velocityX ) > SWIPE_THRESHOLD_VELOCITY )
Toast.MakeText( view.Context, "Right Swipe", ToastLength.Short ).Show();
}
catch ( Exception e )
{
// nothing
}
return false;
}
public void OnLongPress( MotionEvent e )
{
view.Text = "- LONG PRESS -";
}
public bool OnScroll( MotionEvent e1, MotionEvent e2, float distanceX, float distanceY )
{
view.Text = "- FLING -";
return true;
}
public void OnShowPress( MotionEvent e )
{
view.Text = "- SHOW PRESS -";
}
public bool OnSingleTapUp( MotionEvent e )
{
view.Text = "- SINGLE TAP UP -";
return true;
}
}