如何知道之前的位置和新的位置?

2024-04-24

我有一个水平布局的回收视图,一次只有一个视图可见:

mRecyclerView = findViewById(R.id.rvmain);
mRecyclerView.setOnFlingListener(null);
final SnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(mRecyclerView);
mLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new MainActivityRVAdapter(postsModels,MainActivity.this);
mRecyclerView.setAdapter(mAdapter);

使用onScrolllistener,每次滚动时我想知道起始位置和结束位置。怎么知道

我知道这将是了解新职位的一些事情:

    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);

        // get newstate position
        if(newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
            View centerView = snapHelper.findSnapView(mLayoutManager);
            if(centerView != null){
                int pos = mLayoutManager.getPosition(centerView);
                Log.e("Snapped Item Position:",""+pos);
            }
        }
    }

如何在滚动开始之前知道位置

然后我想比较两者并做一些事情,我应该在哪里使用该代码。

我尝试按照提到的解决方案:

@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
    super.onScrollStateChanged(recyclerView, newState);


    if(count == 0) {
        View centerView = snapHelper.findSnapView(mLayoutManager);
        if(centerView != null){
            initial_position = mLayoutManager.getPosition(centerView);
            //initial_position2 = ((LinearLayoutManager)mRecyclerView.getLayoutManager()).findFirstVisibleItemPosition();
            Log.e("Initial Item Position:",""+initial_position);
            //Log.e("Initial Item Position2:",""+initial_position2);
        }
    }

    count ++;

    // get newstate position
    if(newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
        View centerView = snapHelper.findSnapView(mLayoutManager);
        if(centerView != null){
            int pos = mLayoutManager.getPosition(centerView);

            count = 0; // in idle state clear the count again
            Log.e("Snapped Item Position:",""+pos);
        }
    }
}

我得到的结果是:

E/Initial Item Position:: 0
E/Snapped Item Position:: 1

E/Initial Item Position:: 1
E/Snapped Item Position:: 1

E/Initial Item Position:: 1
E/Snapped Item Position:: 1

E/Initial Item Position:: 1
E/Snapped Item Position:: 1

初始位置的最终值与滚动开始时的值不同

并且它返回多次位置。我不想检查所有多个位置的最终位置和初始位置之间的差异。我只想最后检查一下。

我的问题的解决方案

正如我所见,即使我滚动一个位置,onScrollListener 也会运行 4 次。我发现无法控制它运行的次数,但我只想在它第一次运行时做一些事情。我希望运行一段代码 if pos != initial_position。我第一次看到的是真的,后来就变成假的了。

我的问题是,每当我到达与之前的视图不同的任何视图时,我想重置字体。

最终代码:

    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);

        if(count == 0) {
            View centerView = snapHelper.findSnapView(mLayoutManager);
            if(centerView != null){
                initial_position = mLayoutManager.getPosition(centerView);
                //initial_position2 = ((LinearLayoutManager)mRecyclerView.getLayoutManager()).findFirstVisibleItemPosition();
                Log.e("Initial Item Position:",""+initial_position);
                //Log.e("Initial Item Position2:",""+initial_position2);
            }
            count ++;
        }



        // get newstate position
        if(newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
            View centerView = snapHelper.findSnapView(mLayoutManager);
            if(centerView != null){
                int pos = mLayoutManager.getPosition(centerView);

                if(pos != initial_position ){
                    TextView textView2 =  (TextView) centerView.findViewById(R.id.postsmodel_description);
                    if(textsize == 0){
                        textsize = textView2.getTextSize();
                    }
                    textView2.setTextSize(pixelsToSp(textsize));
                }
                count = 0; // in idle state clear the count again
                Log.e("Snapped Item Position:",""+pos);
            }
        }


    }

int count = 0; //field variable
int initial_position;  

@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
    super.onScrollStateChanged(recyclerView, newState);

    if(count == 0) {
       initial_position = mLayoutManager.findFirstVisibleItemPosition();
   }

    count ++;

    // get newstate position
    if(newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
        View centerView = snapHelper.findSnapView(mLayoutManager);
        if(centerView != null){
            int pos = mLayoutManager.getPosition(centerView);

            count = 0; // in idle state clear the count again 
            Log.e("Snapped Item Position:",""+pos);
        }
    }
}

initial_position = 起始位置

pos = 结束位置

快乐编码:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何知道之前的位置和新的位置? 的相关文章

  • 在包“android”中找不到属性“backgroundTint”的资源标识符

    我发现了一些视图 xml 属性 例如backgroundTint backgroundTintMode 但是当我使用它作为视图属性定义时 Eclipse 显示错误 No resource identifier found for attri
  • StrictMode 策略违规:我的应用程序中存在 android.os.strictmode.LeakedClosableViolation?

    Android 开发新手 第一次在我的应用程序上尝试 StrictMode 我注意到以下内容 并想知道这是否是我的应用程序或库中的问题 我不太清楚 谢谢你 D StrictMode StrictMode policy violation a
  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • 在 ViewPager Fragments 中使用 Master/Detail 模板(下载链接)

    工作代码 https github com lukeallison ViewPagerMasterDetail https github com lukeallison ViewPagerMasterDetail Android 主 详细流
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清
  • Android Activity 生命周期函数基础知识

    我正在测试这段代码 它显示活动所处的状态 public class Activity101Activity extends Activity String tag Lifecycle Called when the activity is
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 带有 EditText 和 Spinner 的对话框

    我有一个按钮 单击后会弹出一个对话框 我希望对话框有一个EditText and a Spinner对话框内 我不知道如何设置它的视图 我有一个代码AlertDialog它有效 只是EditText and Spinner我需要将其放入其中
  • 发布android后更改应用内购买项目的价格

    在 Google Play 上发布后 是否可以更改应用内购买商品的价格 我假设该应用程序也已发布 完整的在线文档位于http developer android com http developer android com也http sup
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 如何使用 IF 检查 TextView 可见性

    我有一个 onCheckedChangeListener 来根据选择的单选按钮显示文本视图 我有 1 个疑问和 1 个难题 想知道是否有人可以帮助我 问题 您能否将单选组默认检查值设置为 否 单选按钮 以便一开始就不会检查任何内容 问题 如
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • 如何发布Android .aar源以使Android Studio自动找到它们?

    我正在将库发布到内部 Sonatype Nexus 存储库 Android Studio 有一个功能 可以自动查找通过 gradle 引用的库的正确源 我将 aar 的源代码作为单独的 jar 发布到 Nexus 但 Android Stu
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL

随机推荐

  • iframe 不适用于 iOS(离子框架)

    我为 iOS 和 Android 开发了一个带有 ionic 框架的应用程序 安卓上没有问题 但是 尽管 iframe 在 Android 和浏览器中运行良好 但它在 iOS 设备和模拟器中没有显示任何内容 请帮我 尝试将其添加到您的 co
  • C 中浮点数的比较

    我有一个double打印为0 000000我试图将其与0 0f 不成功 为什么这里有区别呢 确定双精度数是否为零的最可靠方法是什么 确定它是否足够接近零以将其打印为0 000000精确到小数点后六位 例如 fabs d lt 0 00000
  • Google Maps API 多边形文物在缩放上显示

    我有一个使用 JS API 构建的 Google 地图 其中包含英国不同地区的多边形 在 Chrome 已测试 v58 和 v60 上 当用户使用滚轮放大或缩小时 多边形的随机伪像会卡在地图上 进一步缩放可以消除它们或显示不同的伪影 在 F
  • 在虚拟机共享目录上运行“grunt”

    将 Vagrant 与 Windows 主机和 Linux 客户机一起使用 grunt尝试运行作业时返回以下错误 据我了解 在主机 来宾共享目录中 此文件路径超出了 Windows 的 255 个字符限制 npm ERR Error EPE
  • 如何将 UIPopoverView 显示为地图视图的注释? (iPad)

    在 iPad 的地图应用程序上 当您点击图钉时 您会看到带有 i 的普通注释 而不是公开指示符 进一步点击 i 会显示一个像这样的弹出视图控制器 有没有办法可以轻松实现这一目标 首先在地图上添加注释viewForAnnotation方法 设
  • 如何在 PyCharm 中自动运行 Main.py

    我更喜欢在我的项目中使用类似 Java 的组织 例如 每个班级都有不同的 py文件和类Main 其中仅包含 main 函数 每次我对一个类进行更改时 我都需要单击 Main 并运行代码 Ctrl Shift F10 从那里 我该如何定义我的
  • Rails 计数器缓存与计算

    我有一个想要显示总计的集合 其想法是为我需要的每个总计使用缓存 然而 我还需要深入研究数据集 所以很可能无论如何我都必须加载该集合 那么我应该仍然使用缓存还是只使用计算 正如斯蒂芬 奥唐纳 Stephen ODonnell 所说 取决于藏品
  • 如何使用 Kotlin 在 Android 中压缩照片

    现在这是我从智能手机拍照的代码 问题是图像非常大 我想压缩它 有一些帮助或想法吗 谢谢 你的 信息 执行 abrirCamara 方法 private fun abrirCamara val values ContentValues val
  • Facebook 帖子,图片托管在公共 CDN 上

    Facebook 似乎屏蔽了我引用的任何由 CDN 支持的图像 这是真的 有办法解决这个问题吗 是否有文档说明您可以在帖子的 图片 参数中引用哪些内容以及不能引用哪些内容 是的 Facebook 禁止您在帖子 分享等中使用其 CDN 中的图
  • 如何将Stripe支付集成到Yii2中?

    我有以下代码 它运行时没有错误 但它不会将资金插入到 Stripe 服务器上 Stripe 库已正确安装 配置文件
  • BERT - 池化输出与序列输出的第一个向量不同

    我在 Tensorflow 中使用 BERT 有一个细节我不太明白 根据文档 https tfhub dev google bert uncased L 12 H 768 A 12 1 https tfhub dev google bert
  • 如何从 Objective-C 中的方法返回 C 数组?

    我有一个返回变量的函数 我想知道如何返回一个数组 问题是它不是 NSArray 它只是一个像这样的平均 C 数组 b2Fixture addFixturesToBody b2Body body forShapeName NSString s
  • 在CXF中使用javax.ws.rs.client.ClientBuilder创建客户端,任何路由都能够使用本地传输?

    我正在开发一个使用标准的代码库 javax ws rs client ClientBuilder 类 来自 CXF 发行版 用于配置和创建 javax ws rs client Client 这已经足够好了 我现在正在尝试编写使用的测试JA
  • 如何使用 gnu cp 命令将文件复制到多个目录

    是否可以使用 cp 命令将单个文件复制到多个目录 我尝试了以下方法 但没有成功 cp file1 foo bar cp file1 foo bar 我知道可以使用 for 循环或 find 但是可以使用 gnu cp 命令吗 你不能这样做c
  • 将字符串中第 N 次出现的字符替换为其他字符

    考虑a paste 1 10 collapse 这导致 a 1 2 3 4 5 6 7 8 9 10 我想替换每第 n 次 比如第 4 次 出现的 并将其替换为其他内容 比如 n 期望的输出是 1 2 3 4 n 5 6 7 8 n 9 1
  • PHP CodeIgniter 框架中的命名空间

    CodeIgniter 支持命名空间吗 如何让命名空间在 Codeigniter 中工作 实际上 您可以让命名空间与应用程序模型中的相对路径结合使用 此修改使加载模型变得更加容易 并且还允许您拥有接口 将其添加到 application c
  • Akka HTTP 连接池在几个小时后挂起

    我有一个 HTTP 连接池 在运行几个小时后挂起 private def createHttpPool host String SourceQueue HttpRequest Promise HttpResponse val pool Ht
  • 图像中土壤颗粒分水岭以外的替代分割技术

    我正在寻找一种替代方法来分割以下土壤颗粒图像中的颗粒 而不是Python中的分水岭分割 因为它可能会误导对颗粒的正确检测 此外 我正在研究边缘检测图像 使用HED算法 作为附加 我希望找到一种更好的方法来分割颗粒以进行进一步处理 因为我想获
  • 如何根据 Pandas 中的间隔分配值

    我试图根据另一个数据帧的两个值之间的值向数据帧列分配一个值 intervals pd DataFrame columns From To Value data 0 100 A 100 200 B 200 500 C print interv
  • 如何知道之前的位置和新的位置?

    我有一个水平布局的回收视图 一次只有一个视图可见 mRecyclerView findViewById R id rvmain mRecyclerView setOnFlingListener null final SnapHelper s