我有一个带TabLayout的ViewPager,在ViewPager中有一个Fragment,其中创建了一个RecyclerView。
在RecyclerView的行项目中,我创建了一个水平滚动视图,以获取左右滑动的动作。
基本上,我想只将行向左滑动75%,然后显示可滑动视图。
我也使用了RecyclerView的ItemTouchHelper,但它会完全滑动行(100%滑动行)。
我知道谷歌上有可用于创建向左和向右滑动手势的库。
但是所有这些都不起作用,因为当我们在recyclerview项目上滑动时,有时触摸会到达ViewPager,因此页面会被滑动,我不想要那样。
所以我使用了HorizontalScrollView,但问题是我无法在HorizontalScrollView的触摸监听器中检测滑动方向。
实际上,我们想在HorizontalScrollView上滚动一定量后自动滚动。
以下是我尝试过的代码。
基本上,ACTION.DOWN事件并不总是被触发,因此无法推导出滑动方向。
在RecyclerView的行项目中,我创建了一个水平滚动视图,以获取左右滑动的动作。
基本上,我想只将行向左滑动75%,然后显示可滑动视图。
我也使用了RecyclerView的ItemTouchHelper,但它会完全滑动行(100%滑动行)。
我知道谷歌上有可用于创建向左和向右滑动手势的库。
但是所有这些都不起作用,因为当我们在recyclerview项目上滑动时,有时触摸会到达ViewPager,因此页面会被滑动,我不想要那样。
所以我使用了HorizontalScrollView,但问题是我无法在HorizontalScrollView的触摸监听器中检测滑动方向。
实际上,我们想在HorizontalScrollView上滚动一定量后自动滚动。
以下是我尝试过的代码。
holder.scrollContainer.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int scroll1st = 0;
int scroll2nd = 0;
if(event.getAction() == MotionEvent.ACTION_DOWN){
scroll1st = holder.scrollContainer.getScrollX();
Log.d("SCROLL", "Scroll down callded: amt is: " + holder.scrollContainer.getScrollX() );
mDataSet.get(position).isFirstSwipe = false;
} else if (event.getAction() == MotionEvent.ACTION_UP){
scroll2nd = holder.scrollContainer.getScrollX();
Log.d("SCROLL", "Scroll up callded: amt is: " + holder.scrollContainer.getScrollX() );
}
Log.d("SCROLL", "max scroll amount: " + holder.scrollContainer.getMaxScrollAmount());
if(event.getAction() == MotionEvent.ACTION_UP){
if(scroll2nd > scroll1st && (scroll2nd - scroll1st ) > 50 ){
holder.scrollContainer.postDelayed(new Runnable() {
public void run() {
holder.scrollContainer.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
}
}, 100L);
mDataSet.get(position).isFirstSwipe = true;
} else if (scroll1st > scroll2nd && (scroll1st - scroll2nd ) > 50){
holder.scrollContainer.postDelayed(new Runnable() {
public void run() {
holder.scrollContainer.fullScroll(HorizontalScrollView.FOCUS_LEFT);
}
}, 100L);
mDataSet.get(position).isFirstSwipe = true;
}
}
v.onTouchEvent(event);
return true;
}
});
基本上,ACTION.DOWN事件并不总是被触发,因此无法推导出滑动方向。