使用 RecyclerView 更新 ImageView

Updating ImageView with RecyclerView

我在 RecyclerView 上方有一个 ImageView,我正在尝试找到一种方法来更新 ImageView,因为我滚动浏览 RecyclerView,其中最上面的项目(图像) RecyclerView 在滚动的同时放大并显示在 ImageView 上。

经过一番挖掘,我发现我可以使用 ItemTouchHelper.SimpleCallbackItemTouchHelper.Callback。然而,两者都实现了我在自己的 RecyclerView 中不想要的滑动动画,或者我只是没有找到摆脱这些动画的方法。

我希望我的解释足够清楚,如果没有,将不胜感激。

这是我的 xml 文件供参考:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">

<data>
    <variable
        name="viewModel"
        type="com.example.collection.presentation.overview.CollectionOverviewViewModel" />
    <variable
        name="plantPhoto"
        type="com.example.storage.data.PlantPhoto" />
</data>

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:animateLayoutChanges="true">

    <Button
        android:id="@+id/to_collection_overview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/collection_overview"
        app:layout_constraintBottom_toTopOf="@+id/collection_individual_imageview"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.882"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.17000002" />

    <ImageView
        android:id="@+id/collection_individual_imageview"
        android:layout_width="150dp"
        android:layout_height="200dp"
        android:adjustViewBounds="false"
        app:singleImage="@{viewModel.plantPhotoDisplay.plantFilePath}"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.26999998"
        tools:srcCompat="@tools:sample/avatars" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/collection_individual_recyclerview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/collection_individual_imageview"
        app:layout_constraintVertical_bias="0.498"
        app:listPhotoData="@{viewModel.listPlantPhoto}"
        tools:listitem="@layout/image_plant_photo_view" />

    <TextView
        android:id="@+id/test_individual"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:text="Name"
        app:layout_constraintBottom_toTopOf="@+id/collection_individual_recyclerview"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/collection_individual_imageview" />


</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

尝试使用给定的 link -

此处,实现了从可见项目中查找主要居中项目的逻辑,每当您滚动 recyclerview 时,它将继续查找焦点项目,此任务将在 calculatePositionAndScrollDate(...) 方法中使用变量 expectedPositionDate(可能是因为我不确定)在 recyclerview 的 onScrollStateChanged 中并检查您是否必须尝试此代码,如果它有效,您将获得位于中心的 recyclerview 项目。因此,现在您可以按位置从 recyclerview 获取图像并将其设置为 recyclerview 上方的 ImageView,谢谢,如果这对您有帮助,请告诉我们..

试试这个,它可能对你有帮助,我不确定。

使用

 reyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
        override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
        
       LinearLayoutManager myLayoutManager = reyclerView.getLayoutManager();
        int scrollPosition = myLayoutManager.findFirstVisibleItemPosition(); // its provide you the recycler view first item postion 

         // than here  get your image from your imageList[scrollPosition] and set on your top imageView
            
            
            }
        
    })