5

スワイプはある程度機能していますが、画面上に一連のテキストビューとスピナーがあり、そのうちの 1 つをまっすぐにスワイプせず、そのうちの 2 つを少し横切って移動すると、選択されないように見えますそれはうまくいきます。一般的に、iPhone で起こっていることほどうまくスワイプを拾っているとは思わないので、誰かが私のコードを批評して最適化を手伝ってくれるかどうか疑問に思っていました。

GesureDectector と GestureListener を初期化しています。GestureListener クラスは次のとおりです。

    public class GestureListener : Java.Lang.Object, GestureDetector.IOnGestureListener
    {
        private static int SWIPE_MAX_OFF_PATH = 250;
        private static int SWIPE_MIN_DISTANCE = 50;
        private static int SWIPE_THRESHOLD_VELOCITY = 200;
        private View view;
        private Activity act;

        public GestureListener(View _view, Activity _act)
        {
            view = _view;
            act = _act;
        }

        public bool OnDown( MotionEvent e )
        {
            return true;
        }

        public bool OnFling( MotionEvent e1, MotionEvent e2, float velocityX, float velocityY )
        {
            if ( Math.Abs( e1.GetY() - e2.GetY() ) > SWIPE_MAX_OFF_PATH ){
                return false;
            }
            if ( e1.GetX() - e2.GetX() > SWIPE_MIN_DISTANCE && Math.Abs( velocityX ) > SWIPE_THRESHOLD_VELOCITY ){
                HandleLeft();               
            }else if ( e2.GetX() - e1.GetX() > SWIPE_MIN_DISTANCE && Math.Abs( velocityX ) > SWIPE_THRESHOLD_VELOCITY ){
                HandleRight();
            }
            return false;
        }

        public void OnLongPress( MotionEvent e )
        {

        }

        public bool OnScroll( MotionEvent e1, MotionEvent e2, float distanceX, float distanceY )
        {
            return true;
        }

        public void OnShowPress( MotionEvent e )
        {

        }

        public bool OnSingleTapUp( MotionEvent e )
        {
            return true;
        }

        private void HandleLeft(){
            Male currActivity = (Male)act;
            currActivity.GetStrings("Female");
        }

        private void HandleRight(){
            Male currActivity = (Male)act;
            currActivity.GetStrings("Results");
        }
    }

これを OnTouch イベントに使用しています。

 public bool OnTouch(View v, MotionEvent e){
     bool handled = false;

     if(flingDetector != null){
    handled = flingDetector.OnTouchEvent(e);
     }

     if(v.GetType() == typeof(Spinner)){
    return !handled;    
     }else{
    return handled;
     }
 }

どんな助けでも大歓迎です。

4

0 に答える 0