2017-10-04 73 views
0

我有一個很多孩子的看法。我需要的是在Swipe或Fling動作上實施反應。問題在於,如果我刪除所有孩子,它纔會真正起作用,否則,主佈局頂部的子視圖會嘗試滑動。如何忽略覆蓋視圖並檢測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(); 
    } 

重複:如果該活動是在該州時,有在頂部沒有子視圖,它按預期工作。

所以,問題是:我能做些什麼使活動獲取手勢忽略覆看法?

回答

1

的問題是孩子的意見越來越觸摸事件,而不是給它的父。 如果您不使用覆蓋視圖可點擊事件,則可以關閉該視圖的可點擊屬性,如view.setClickable(false); ...然後,所有點擊事件將轉到其父視圖。如果沒有工作,你可以在觸摸監聽器定義在這樣每個覆觀點:

view.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     return false; 
    } 
}); 

UPD: 下面這個問題的另一個(右)的解決方案:https://developer.android.com/training/gestures/viewgroup.html#delegate

+1

攔截觸摸ViewGroup中的事件是我需要的。謝謝! –

0

嘗試設置android:clickable="true"android:descendantFocusability="blocksDescendants"到您想要在xml文件中滑動的視圖。這應該阻止兒童接收點擊事件。

+0

這不行,謝謝你 –