gridview上的手势并不总是有效

时间:2012-04-19 14:54:49

标签: android gridview calendar gesture

我有一个带有gridview的日历,并且更改月份应该在gridview上使用手势(flings)。从左到右的投掷到上个月,从右到左的投掷应该到下个月。第一个工作,第二个工作并不总是工作,它检测从左到右的投掷(40-50%)。我正在使用标准的onfling功能,我还有两个带箭头的按钮,指示另一个更改月份的选项。这些按钮工作得非常好,如果我在imageview或textview上使用onfling功能,或者任何不是gridview的东西,它都能很好地工作。

    class MyGestureDetector extends SimpleOnGestureListener
    {
        private static final int SWIPE_MIN_DISTANCE = 40;
        private static final int SWIPE_MAX_OFF_PATH = 250;
        private static final int SWIPE_THRESHOLD_VELOCITY = 200;

        @Override
        public boolean 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)
            {
                //Log.i("Swipe", "Right to Left");
                //Log.i("Swipe", "Swipe rowid2" + selected_row_id2 + "set to true");
                gestureDirection = "rtl";
                Toast toast = Toast.makeText(getApplicationContext(), "RTL", 3500);
                toast.show();
                return true;
            }
            else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
            {
                //Log.i("Swipe", "Left to Right");
                //Log.i("Swipe", "Swipe rowid" + selected_row_id2 + "set to false");
                gestureDirection = "ltr";
                Toast toast2 = Toast.makeText(getApplicationContext(), "LTR", 3500);
                toast2.show();
                return true;
            }
            return false;
        }
    }

正如我所提到的,它是一个标准的onFLing功能,但从右到左的投掷有时表现得好像我从左到右畏缩,而不是改为下个月它回到上个月。它应该是不可能的,因为(e1.getX() - e2.getX())不应该允许这样做。我注意到如果我从右到左的投掷很短(但当然比SWIPE_MIN_DISTANCE更大)它总是有效,但是例如如果我的投掷尺寸几乎是3/4屏幕,它有时表现不正确。另一个有趣的事情,它总是在模拟器上工作,问题是在手机上检测到的。 有谁有这个问题?

0 个答案:

没有答案