android - Recyclerview 的平滑滚动

标签 android material-design

我在滚动 recyclerview 时遇到了一些问题。我将 smoothScrollToPosition 方法添加到 LinearLayoutManager 但它没有改变任何东西。我尝试添加名为 app:fastScrollEnabled 的属性,但它导致了错误.我想要一个平滑的滚动。我应该怎么办?提前谢谢你:)

XML 代码:

  <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:id="@+id/stu_toolbar"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#a653a3"
        app:layout_scrollFlags="scroll|enterAlways">

        <ImageView
            android:id="@+id/check_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_margin="@dimen/normal_margin"
            android:src="@drawable/ic_done_white_24dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:layout_marginRight="@dimen/normal_margin"
            android:text="دانش آموزان"
            android:textSize="20sp" />


    </android.support.v7.widget.Toolbar>

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collpase_view_pager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_scrollFlags="scroll|enterAlways">

        <android.support.v4.view.ViewPager
            android:id="@+id/slide_show"
            android:layout_width="match_parent"
            android:layout_height="150dp" />

    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>


<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycle2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

Java 代码:

public class Student extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.student_list);


    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycle2);
    LinearLayoutManager layoutManager = new LinearLayoutManager(this) {

        @Override
        public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
            LinearSmoothScroller smoothScroller = new LinearSmoothScroller(Student.this) {

                private static final float SPEED = 300f;

                @Override
                protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
                    return SPEED / displayMetrics.densityDpi;
                }

            };
            smoothScroller.setTargetPosition(position);
            startSmoothScroll(smoothScroller);
        }

    };
    recyclerView.setLayoutManager(layoutManager);
    AdapterSTList adapterSTList = new AdapterSTList(this, Generator.getStudents());
    recyclerView.setAdapter(adapterSTList);
    ViewPager viewPager = (ViewPager) findViewById(R.id.slide_show);
    ImageView check_btn = (ImageView) findViewById(R.id.check_button);
    ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(this);
    viewPager.setAdapter(viewPagerAdapter);

    check_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(Student.this,Main.class);
            startActivity(intent);
        }
    });
}
}

最佳答案

这是因为您的回收站 View 位于嵌套的 ScrollView 中。

<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycle2"
    android:nestedScrollingEnabled="false"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

也在您的代码中执行此操作以支持旧设备:

 recyclerView.setNestedScrollingEnabled(false);

关于android - Recyclerview 的平滑滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46491175/

相关文章:

Android ListFragment 无法从异步任务填充

android - 安卓应用与ACR122U卡仿真交互

android - 使用jetpack compose时android studio gradle脚本中compileSdk和compileSdkVersion有什么区别

android - 如何使用为 Android 12 发布的新 Material You 颜色

android - 如何让 ProgressBar 循环并处于确定模式?

android - AppCompat v21 深色工具栏样式

c# - 如何在 xamarin 表单中设置 MasterDetailPage 的宽度

java - 如何使一个 Observable 发出由 RxJava 2 中另一个 Observable 发出的组合项?

android - Material 主题 Android Action Bar 样式生成器

android - NestedScrollView 滚动不完整