I am trying play around with gestures but I can't get them to work.
I have this
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
namespace Myapp
{
[Activity(Label = "My Activity")]
public class AboutActivity : Activity
{
private TextView displayText;
private GestureDetector gestureScanner;
private GestureListener gestureListener;
protected override void OnCreate(Bundle bundle)
{
RequestWindowFeature(WindowFeatures.NoTitle);
base.OnCreate(bundle);
SetContentView(Resource.Layout.Ab开发者_开发技巧out);
displayText = FindViewById<TextView>(Resource.Id.Privacy);
gestureListener = new GestureListener(displayText);
gestureScanner = new GestureDetector(this, gestureListener);
}
public override bool OnTouchEvent(MotionEvent e)
{
return gestureScanner.OnTouchEvent(e);
}
}
public class GestureListener : GestureDetector.SimpleOnGestureListener
{
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;
}
}
}
Nothing every triggers.
Besides creating the GestureDetector you may miss assigning gesture events to GestureDetector, for example:
gestureDetector.SetOnDoubleTapListener(this);
Note that "this" here means that OnDoubleTapEvent is implemented in the same class as the line above.
精彩评论