私はチャイルドがたくさんあるという意見があります。私が必要とするのは、スワイプやフリングの動きに対する反応を実装することです。問題は、すべてのチャイルドを削除した場合にのみ実際に機能することです。それ以外の場合は、メインレイアウトの上にある子ビューは、スワイプする試行をブロックします。上のビューを無視してonFling(onSwipe)を検出する方法はありますか?
メインレイアウトにonSwipeListenerを追加し、同じ成功を収めたアクティビティ全体にGestureListenerを追加することを試みました。繰り返すに
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_schedule);
main_layout = findViewById(R.id.schedule_main_view);
Animation fadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fade);
main_layout.startAnimation(fadeInAnimation);
GestureDetector.SimpleOnGestureListener simpleOnGestureListener =
new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDown(MotionEvent event) {
return true;
}
@Override
public boolean onFling(MotionEvent event1, MotionEvent event2,
float velocityX, float velocityY) {
Log.d(null,"Fling");
int dx = (int) (event2.getX() - event1.getX());
// don't accept the fling if it's too short
// as it may conflict with a button push
if (Math.abs(dx) > 20
&& Math.abs(velocityX) > Math.abs(velocityY)) {
if (velocityX > 0) {
Log.d(DEBUG_TAG, "onFling: " + event1.toString() + event2.toString());
Log.d(DEBUG_TAG, "onFling To Right");
} else {
Log.d(DEBUG_TAG, "onFling: " + event1.toString() + event2.toString());
Log.d(DEBUG_TAG, "onFling To Left");
}
return true;
} else {
return false;
}
}
};
shift = getIntent().getIntExtra(WEEK_SHIFT, CURRENT_WEEK);
mDetector = new GestureDetectorCompat(this,simpleOnGestureListener);
unDimScreen();
setupWeek();
}
:
私の現在の(非稼働)ソリューションは、のように見える活動が意図したとおり、それは動作しますが、最上部には子ビューが存在しないときの状態にある場合。
質問:上に表示されたビューを無視して、アクティビティフェッチジェスチャを行うにはどうすればよいですか?
ViewGroupのIntercept Touch Eventsが私の必要なものです。ありがとうございました! –