Snippets

Oleg Chulakov Studio Заметка 5. ViewPager2

Created by Александр Волохов last modified
public class YourAdapter
  extends RecyclerView.Adapter<YourAdapter.ItemHolder> {

  List<Object> parameters;

  public YourAdapter(List<Object> parameters) {
    this.parameters = parameters;
  }

  @NonNull
  @Override
  public ItemHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new ItemtHolder(
      DataBindingUtil.inflate(
        LayoutInflater.from(parent.getContext()), R.layout.item, parent, false));
  }

  @Override
  public void onBindViewHolder(@NonNull ItemHolder holder, int position) {
    ...
  }

  @Override
  public int getItemCount() {
    return parameters.size();
  }

  public class ItemHolder extends RecyclerView.ViewHolder {
   ItemBinding binding;

    public ItemHolder(ItemBinding binding) {
      super(binding.getRoot());
      this.binding = binding;
    }
  }
}
public class YourFragment extends Fragment {

  public FragmentBinding binding;
  public constMarginPx = 400;
   
  @Override
  public View onCreateView(
      @NonNull LayoutInflater inflater,
      @Nullable ViewGroup container,
      @Nullable Bundle savedInstanceState) {
    binding =
      DataBindingUtil.inflate(inflater, R.layout.fragment, container, false);
    binding.viewPager.setAdapter(new YourAdapter(getData()));
    binding.viewPager.setClipToPadding(false);
    binding.viewPager.setClipChildren(false);
    binding.viewPager.setOffscreenPageLimit(2);
    binding.viewPager.setPageTransformer(new YourPagerTransformer(marginPx));
    return binding.getRoot();
  }
      
  private List<Object> getData() {
    ...
  }
}
public class YourPagerTransformer implements ViewPager2.PageTransformer {

  int marginPx;

  public YourPagerTransformer(int marginPx) {
    this.marginPx = marginPx;
  }

  @Override
  public void transformPage(@NonNull View page, float position) {
    page.setTranslationX(-marginPx * position);
  }
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/fragment_layout"
        android:layout_width="match_parent"
        android:layout_height="204dp"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.viewpager2.widget.ViewPager2
            android:id="@+id/viewPager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/item"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.cardview.widget.CardView
            android:id="@+id/item_preview"
            android:layout_width="148dp"
            android:layout_height="148dp"
            app:cardCornerRadius="6dp"
            app:cardElevation="6dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.