2

グリッドビューのカレンダーがあり、月の変更はグリッドビューのジェスチャー(フリング)で機能するはずです。左から右へのフリングは前月に行き、右から左へのフリングは翌月に行くはずです。最初のものは機能しますが、2番目のものは常に機能するとは限りません。代わりに、左から右へのフリングを検出します(40-50%)。私は標準のオンフリング機能を使用しており、月を変更する別のオプションを示す矢印の付いた他の2つのボタンがあります。これらのボタンは非常にうまく機能し、imageviewやtextview、またはグリッドビューではないものでonfling関数を使用すると、非常にうまく機能します。

    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画面の場合、正しく動作しないことがあります。もう一つの興味深いことは、それは常にエミュレーターで動作し、問題は電話で検出されます。誰かがこの問題を抱えていましたか?

4

0 に答える 0