我对RecyclerView有疑问。 我希望通过
滚动recyclelerView时在屏幕上更改小部件位置onScrolled(RecyclerView recyclerView, int dx, int dy)
方法
在此方法中,我通过更改LayoutParams来更改另一个窗口小部件位置。但是,当我慢慢滚动时,我会感到颤抖。
当我更改另一个可以自由空间拉伸RecyclerView的视图的位置时,RecyclerView具有match_parent高度。
拉伸时如何解决RecyclerView的颤抖?
答案 0 :(得分:1)
动态更改RecyclerView的高度似乎是反模式。
我建议你使用paddingTop和clipToPadding =" false"。
你的布局xml可能是这样的:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"/>
<FrameLayout
android:id="@+id/header_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
... here is same layout, samll text and "STARTEN" button.
</FrameLayout>
</FrameLayout>
您的java程序可能是这样的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
final View headerContainer = findViewById(R.id.header_container);
final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
... initialization of recyclerView ...
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
//change height of headerContainer
}
});
// set paddingTop of RecyclerView
headerContainer.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
headerContainer.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
headerContainer.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
recyclerView.setPadding(
recyclerView.getPaddingLeft(),
headerContainer.getHeight(),
recyclerView.getPaddingRight(),
recyclerView.getPaddingBottom()
);
}
});
}