Это должно работать в теории, я не тестировал это:
Для замораживания вертикальной прокрутки RecyclerView:
RecyclerView имеет метод с именем setLayoutFrozen(boolean frozen);
, этот метод, кажется, блокирует TouchEvent RecyclerView, пока он активен (когда вы устанавливаете frozen
в значение true).
Теперь я предполагаю, что ваш метод showTrackContextMenu(.....)
вызывается, когда вы долго нажимаете элемент в своем списке (кажется, вы создали для этого интерфейс). В любом случае попробуйте заморозить RecyclerView в конце этого метода. Примерно так:
private void showTrackContextMenu(ViewGroup rootView, float x, float y, int itemPosition) {
.......
.......
.......
popupWindow.show();
//here
yourRecyclerView.setLayoutFrozen(true);
}
Если вы хотите убрать замораживание, чтобы можно было прокрутить снова, просто вызовите это:
yourRecyclerView.setLayoutFrozen(false);
Для замораживания ViewPager:
Хорошо, я не могу найти метод, созданный для замораживания ViewPager, единственное, что вы действительно можете сделать, - это создать собственный ViewPager, использовать его вместо этого и заставить его делать то, что вы хотите:
class MyViewPager extends ViewPager{
private boolean frozen = false;
public MyViewPager(Context context){
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void freezeViewPager(boolean frozen){
this.frozen = frozen;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(frozen){
return false;
}else{
return super.onTouchEvent(event);
}
}
}
Затем вы используете указанный выше ViewPager в xml вместо используемого по умолчанию.
Чтобы заморозить его:
.......
popupWindow.show();
//here freeze recyclerView
yourRecyclerView.setLayoutFrozen(true);
//here freeze view pager
myViewPager.freezeViewPager(true);
Чтобы остановить замораживание:
myViewPager.freezeViewPager(false);