开发者

MonoDroid Gestures not working for me

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜