私は同じ問題がありました。 Mr.Indiaからの回答は役に立ちましたが、あなたのコメントとして、時にはうまくいきました。私が何をしたか
は> 500の速度は、それはそれは考えられ速度にまで起こっているのとtopRowVerticalPositionが、それはrecyclerviewの上にあることを意味を意味している場合、私は確認しACTION_UPオン
recyclerView.setOnTouchListener(new View.OnTouchListener() {
public float speed;
public VelocityTracker mVelocityTracker;
@Override
public boolean onTouch(View v, MotionEvent event) {
int index = event.getActionIndex();
int action = event.getActionMasked();
int pointerId = event.getPointerId(index);
switch (action) {
case MotionEvent.ACTION_DOWN:
if(mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
else {
mVelocityTracker.clear();
}
mVelocityTracker.addMovement(event);
break;
case MotionEvent.ACTION_MOVE:
if(mVelocityTracker != null) {
mVelocityTracker.addMovement(event);
mVelocityTracker.computeCurrentVelocity(1000);
speed = VelocityTrackerCompat.getYVelocity(mVelocityTracker, pointerId);
}
break;
case MotionEvent.ACTION_UP:
int topRowVerticalPosition = (recyclerView == null || recyclerView.getChildCount() == 0) ? 0 : recyclerView.getChildAt(0).getTop();
if(speed > 500 && topRowVerticalPosition >= 0) {
ReaderFragmentParent parent = (ReaderFragmentParent) getActivity();
ReaderPager pager = parent.getPager();
if(pager != null) {
pager.setCurrentItem(pager.getCurrentItem()-1);
}
}
return false;
case MotionEvent.ACTION_CANCEL:
mVelocityTracker.recycle();
break;
}
return false;
}
});
ました。次にViewPagerとsetCurrentItemを前の項目に取得します。
それは汚いハックのビットだが、それは私が垂直ViewPager
こんにちは上のページの間に良好なスクロールのような外観を作るために見つけた唯一の方法でした!私はまったく同じことを行う必要があります、運は何ですか? – Caique
こんにちは@Caique、残念ながら私たちのすべてのケースで動作するソリューションはありません。 Mr. Indiaからの提案は私たちにとって有益でしたが、彼の提案の下でコメントしたところでは、この解決策は毎回機能しません。 – jennymo
答えが分かりました。私がしたことは:recyclerviewのonTouchを圧倒し、ACTION_DOWN、ACTION_MOVE、ACTION_UPから速度を得ました。速度が> 500(ある速度で上がっている)ならば、私はviewpagerの1つの位置に戻ります。それはかなりうまくいっています。私はコードで答えとして投稿し、多分あなたを助けることができる – Caique