【发布时间】:2016-02-12 06:42:38
【问题描述】:
我有带有 tablayout 的 viewpager,在 ViewPager 里面我有一个正在创建 RecyclerView 的 Fragment,
在 RecyclerVIew roe 项目中,我创建了一个 Horizontal ScrollView,用于向左/向右滑动,
基本上我只想将行向左滑动屏幕的 75%,然后显示可滑动视图,
我也使用了ItemTouchHelper 或RecyclerView,但它刷了整行(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 事件,因此不能不派生滑动方向
【问题讨论】:
标签: android android-recyclerview