我扩展了recyclerview,所以我可以扩展它。它按照我想要的方式工作,但现在我想以编程方式滚动x个像素。用户故事是,如果我点击屏幕的上半部分,它应滚动x个像素数量,同样会到屏幕的下半部分。
这就是我的所作所为:
的活动:
@Override
public boolean dispatchTouchEvent(MotionEvent event)
{
// if(mComicViewerFragment != null)
// mComicViewerFragment.consumeEvent(event);
mScaleDetector.onTouchEvent(event);
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
int y = (int) event.getY();
if(y >= mScreenSize.y / 2)
{
mComicViewerFragment.scrollBy((int)(mScreenSize.y * 0.10f));
Log.i(ComicApplication.TAG, "ComicViewerActivity.onTouchEvent : You are tapping the lower part : " + y);
}
else
{
mComicViewerFragment.scrollBy((int)(-mScreenSize.y * 0.10f));
Log.i(ComicApplication.TAG, "ComicViewerActivity.onTouchEvent : You are tapping the upper part : " + y);
}
}
return super.dispatchTouchEvent(event);
}
片段
public void scrollBy(int by)
{
mScalingRecyclerView.smoothScrollBy(0, by);
}
每次点击时,它都不会按x像素数滚动。这是因为我创建了一个从RecyclerView扩展的自定义视图吗?我应该在哪里正确调用smoothScrollBy?这被认为很容易,但我被卡住了。
答案 0 :(得分:3)
由于recyclerView.smoothScrollBy(0, pixels);
不适用于您的自定义视图,您可以尝试其他方式。
你可以做的是通过做一些数学来按位置滚动,但它不会精确到像素。
假设您的商品高度为100dp,您可以通过代码see here
将dp转换为任何屏幕类型的像素让我们说100dp每个项目达到100px,你想要在Recycler上滚动400px。这是4个职位(400/100)。
然后您需要的是查看底部项目位置编号中的当前值,添加4并按位置滚动或平滑滚动。
这是一个helper class,用于向您展示如果您希望在Recycler中向上或向下移动,可以在View中获取Top或Bottom项目位置。
获取完整的解决方案Check here