java - Android:在回收 View 中获取用户在屏幕上的确切位置

标签 java android user-interface android-recyclerview

我要引用下面的问题,因为这个人一个月前问过同样的问题,但还没有人回答他:

How to scroll the user at the exact position, which is somewhere between two views.?

当用户滚动到 recyclerview 列表中的某处并最小化应用程序,然后从 bg 恢复它 - 或者进入另一个 Activity/fragment 并返回到 recyclerview - 我希望列表滚动到完全相同的位置用户在。当我说确切位置时,我的意思是它必须是完全相同的位置 - 如果我只是告诉应用程序滚动到位置 X,那么最上面的 View 将位于顶部,但它不会是完全相同的列表状态正如用户之前所做的那样。我需要列表看起来与用户离开和返回之前的样子相同。这可能吗?如果可能,如何实现?

我当前的代码:

viewHolder.objectInTheList.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                        if (recyclerViewInterface != null) {

                            FileAccessUtil.getInstance().setIntegerProperty("recyclerListPosition", position);
                            recyclerViewInterface.onRecyclerviewListEventOccured(position);

                        }
                    }

            });

然后当我返回 Activity 时,我从 fileaccessutil 加载该参数并执行:

 recyclerlist.scrollToPosition(positionFromFileAccessUtil);

这个解决方案不是最优的,因为正如我之前提到的,它不会将用户滚动到他之前所在的完全相同的屏幕位置。

最佳答案

你看过RecyclerView.ScrollBy(x,y)了吗? ?

ScrollBy(0,y) 将以与向上移动手指相同的方向滚动 RecyclerView。它不会滚动到绝对位置,相反,它只会将像素添加到先前的滚动位置。要向相反方向滚动,只需使用 ScrollBy(0,-y)。请注意,x 设置为零,因为您只想向上/向下滚动。

现在,为了实现一个完整的解决方案,您需要有一种方法来保存列表的当前滚动位置。我没有测试它,但我很确定 RecyclerView.getScrollY() 将始终返回 0。要解决这个问题,您需要通过监听 RecyclerView 的滚动变化来跟踪自己的位置。

当您想恢复滚动位置时,您可以使用保存的当前位置,因为 RecyclerView 最初的滚动值为 0。

关于java - Android:在回收 View 中获取用户在屏幕上的确切位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32972184/

相关文章:

java - 如何使用 spring 将对象从 jsp 传递到 Controller

java - new Date() 和文件创建日期之间的奇怪区别

python - 将 setStatusTip() 函数与 TreeWidgetItem 一起使用时,状态消息不会出现

Java JFrame无法创建按钮(数组列表)

java - 如何使用 SimpleDateFormat.parse() 将 Calendar.toString() 转换为日期?

java - 为什么 C# 构造函数行为与 Java 不同,反之亦然?

java - 无法通过 Android ksoap2 从 Web 服务接收数据

android - 当我检查系统中是否存在 GPS 传感器时应用程序崩溃?

android - AndEngine AreaTouched 移动 Sprite 的方法被延迟

user-interface - 用户界面设计工具