Я пытаюсь реализовать пользовательскую панель инструментов Collapsing.Я хочу, чтобы, если пользователь прокручивал просмотр списка, содержимое, указанное выше, прокручивалось вверх вместе с просмотром списка.Это работает, но я хочу ограничить это, чтобы верхняя панель сохраняла определенную высоту.
Я пытался использовать nestedscrollview с его рециклером.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<android.support.v4.widget.NestedScrollView
android:id="@+id/nestedShit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="true">
<ImageView
android:id="@+id/top_seller"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="@color/colorAccent"
android:contentDescription="@string/app_name"
android:adjustViewBounds="true"
android:src="@drawable/ic_launcher_background"
android:scaleType="fitXY"/>
<android.support.v7.widget.RecyclerView
android:layout_below="@+id/top_seller"
android:id="@+id/product_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:scrollbars="none" />
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
</LinearLayout>
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView bestRecyclerView = (RecyclerView)findViewById(R.id.product_list);
GridLayoutManager mGrid = new GridLayoutManager(this, 2);
bestRecyclerView.setLayoutManager(mGrid);
bestRecyclerView.setHasFixedSize(true);
bestRecyclerView.setNestedScrollingEnabled(false);
ProductAdapter mAdapter = new ProductAdapter(MainActivity.this, getProductTestData());
bestRecyclerView.setAdapter(mAdapter);
final NestedScrollView nestedScrollView = findViewById(R.id.nestedShit);
final ImageView imageView = findViewById(R.id.top_seller);
imageView.post(new Runnable() {
@Override
public void run() {
final float bottomImage = imageView.getBottom();
nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView nestedScrollView, int i, int i1, int i2, int i3)
{
float perc = (float) i1 / bottomImage;
Log.i(getClass().getName(), "PERCENTAGE: " + perc);
}
});
}
});
}
private List<ProductObject> getProductTestData() {
List<ProductObject> featuredProducts = new ArrayList<ProductObject>();
featuredProducts.add(new ProductObject("Gig Laptop", "lap1"));
featuredProducts.add(new ProductObject("Mash Laptop", "lap1"));
featuredProducts.add(new ProductObject("Blue Dot Lapto", "lap1"));
featuredProducts.add(new ProductObject("Skin Laptop", "lap1"));
featuredProducts.add(new ProductObject("Dice Laptop", "lap1"));
featuredProducts.add(new ProductObject("Ingrate Laptop", "lap1"));
featuredProducts.add(new ProductObject("Mush Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
featuredProducts.add(new ProductObject("Stained Laptop", "lap1"));
return featuredProducts;
}
Nestedscrollview долженпрекратите прокрутку, когда будет достигнут предел 50dp.Поэтому, когда пользователь прокручивает список, он всегда будет видеть верхнюю панель, высота которой составляет 50 dp.