ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

android – 如何通过特定像素以编程方式滚动RecyclerView?

2019-06-28 00:23:20  阅读:225  来源: 互联网

标签:android android-recyclerview recyclerview-layout


我扩展了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?这被认为很容易,但我被卡住了.

解决方法:

as recyclerView.smoothScrollBy(0,pixels);不适用于您的自定义视图,您可以尝试另一种方式.

你可以做的是通过做一些数学滚动位置,但它不会精确到像素.

假设您的项目高度相等,为100dp,您可以通过代码see here将dp转换为任何屏幕类型的像素

让我们说每个项目100dp达到100px,你想要在Recycler上滚动400px.这是4个职位(400/100).

您只需要查看底部项目位置编号中的当前值,添加4并按位置滚动或平滑滚动.

这是一个helper class,向您展示如果您希望在Recycler中向上或向下移动,如何在View中获取顶部或底部项目位置.

对于完整的解决方案Check here

标签:android,android-recyclerview,recyclerview-layout
来源: https://codeday.me/bug/20190627/1309974.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有