グリッドビューのカレンダーがあり、月の変更はグリッドビューのジェスチャー(フリング)で機能するはずです。左から右へのフリングは前月に行き、右から左へのフリングは翌月に行くはずです。最初のものは機能しますが、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画面の場合、正しく動作しないことがあります。もう一つの興味深いことは、それは常にエミュレーターで動作し、問題は電話で検出されます。誰かがこの問題を抱えていましたか?