MonoDroid手势不适合我

时间:2011-08-04 19:51:40

标签: xamarin.android

我正在尝试使用手势,但我无法让它们工作。

我有这个

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.About);


            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;
        }
    }

}

没有任何触发器。

1 个答案:

答案 0 :(得分:1)

除了创建 GestureDetector 之外,您可能会错过向GestureDetector分配手势事件,例如:

gestureDetector.SetOnDoubleTapListener(本);

请注意,此处的“this”表示 OnDoubleTapEvent 与上面的行在同一个类中实现。