java - 如何以编程方式检测项目何时在 RecyclerView 中可见?

标签 java android android-recyclerview mpandroidchart

我的 Android 应用有一个带有 PagerSnapHelper 的 RecyclerView。每个项目都有宽度和高度作为 match_parent。因此,只有 1 个 View 项目留在页面上。我有兴趣了解特定 View 项何时对用户完全可见。我想对该 View 执行一些操作。

更多详情

我正在使用 MpAndroidChart 在每个 View 项中显示图表图书馆。我也在为这些图表制作动画。但是由于 RecyclerView 加载了一些与当前可见 View 项目相邻的 View 项目,动画甚至在 View 对用户可见之前就发生了。因此,我需要一个回调方法来确定特定的 View 项对用户可见。这样我就可以在那时为我的图表制作动画。

代码

我尝试了以下方法来确定当前可见的项目 View 是什么。但这并没有解决我的问题:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        if (newState != RecyclerView.SCROLL_STATE_DRAGGING) {
            View centerView = snapHelper.findSnapView(linearLayoutManager);
            BarChart barChart = centerView.findViewById(R.id.barChart);
            barChart.animateXY(ChartUtil.TIME, ChartUtil.TIME);
        }
    }
});

编辑1

为 RecyclerView 的每个项目 View 实现逻辑的唯一已知回调方法是 onBindViewHolder。但问题是,如果当前可见的项目位置是(假设)x,那么 RecyclerView 也会提前加载 x+1,以便滚动保持平滑。因此,动画项目 View (在我的例子中)的逻辑也在 View 对用户可见之前执行。因此,我需要一个回调方法来告诉我 x 位置(或)项目 View 对用户“可见”。

任何帮助将不胜感激!

最佳答案

很抱歉在 Kotlin 上回答,我现在无法在 Java 上快速检查。但我希望它也是可读的:

recycler_view.addOnScrollListener(object : RecyclerView.OnScrollListener() {
    override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
        super.onScrolled(recyclerView, dx, dy)
        if (layoutManager.findViewByPosition(layoutManager.findFirstVisibleItemPosition()).y == 0) {
            // Do what you need
        }
    }
})

所以你只需要找到第一个可见位置的偏移量。如果它等于 0,那么您的项目将完全显示。

关于java - 如何以编程方式检测项目何时在 RecyclerView 中可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50925731/

相关文章:

java - 搜索数据列表中的 View 回收 View Android

android - 如何在同一个 onclick 方法中使用 notifyDataSetChanged 和 setText

java - 如何在 Java 中使用 System.out.println 在控制台中打印突出显示的彩色文本

java - 在 Java 中重用 SecretKey

php - Android中JSON无法转换为json对象

android - & 符号 list 文件( Intent 过滤器)

java - RecyclerView Android 不显示任何 Gson 响应结果

java - 如何绘制线条并删除我在 ImageView Android Xamarin 上绘制的线条

java - 新应用程序数据决策

android - 多线程在 Android 中是如何工作的?