Вывод элементов в RecyclerView

пытаюсь написать небольшую игру. Подскажите пожалуйста как реализовать вывод списка уровней в таком виде как на картинке.

Мой адаптер выглядит следующим образом:

public class LevelsAdapter extends RecyclerView.Adapter<LevelsAdapter.LevelViewHolder> {
    private List<Level> levels;
    private OnLevelClickListener listener;

    public interface OnLevelClickListener {
        void onLevelClick(int levelNumber);
    }

    public LevelsAdapter(List<Level> levels, OnLevelClickListener listener) {
        this.levels = levels;
        this.listener = listener;
    }

    public void setLevels(List<Level> levels) {
        this.levels = levels;
        notifyDataSetChanged();
    }

    public List<Level> getLevels() {
        return levels;
    }

    @NonNull
    @Override
    public LevelViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_level, parent, false);
        return new LevelViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull LevelViewHolder holder, int position) {
        Level level = levels.get(position);
        holder.textViewLevel.setText(level.getLevel() + "");

        if (level.getScore() != null) {
            int stars = calculateStars(level.getScore()); // Используем очки текущего уровня

            if (stars >= 1) holder.imgStar1.setImageResource(R.drawable.icon_level_star);
            if (stars >= 2) holder.imgStar2.setImageResource(R.drawable.icon_level_star);
            if (stars >= 3) holder.imgStar3.setImageResource(R.drawable.icon_level_star);
        }

        holder.itemView.setOnClickListener(v -> {
            if (level.getLocked() == 0) {
                listener.onLevelClick(level.getLevel());
            }
        });
    }

    //Расчет того, сколько звезд присвоить за прохождение уровня
    private int calculateStars(int totalScore) {
        int stars;

        if (totalScore >= 320) { // 80% и выше от максимального
            stars = 3;
        } else if (totalScore >= 200) { // 50% - 79% от максимального
            stars = 2;
        } else if (totalScore >= 100) { // 25% - 49% от максимального
            stars = 1;
        } else { // Менее 25% от максимального
            stars = 0;
        }

        return stars;
    }

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

    public static class LevelViewHolder extends RecyclerView.ViewHolder {
        TextView textViewLevel;
        ImageView imgStar1;
        ImageView imgStar2;
        ImageView imgStar3;

        public LevelViewHolder(@NonNull View itemView) {
            super(itemView);
            textViewLevel = itemView.findViewById(R.id.textViewLevel);
            imgStar1 = itemView.findViewById(R.id.img_star_1);
            imgStar2 = itemView.findViewById(R.id.img_star_2);
            imgStar3 = itemView.findViewById(R.id.img_star_3);
        }
    }
}

А разметка для отдельного элемента списка таким образом:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="2dp">

    <TextView
        android:id="@+id/textViewLevel"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:background="@drawable/level_bg"
        android:fontFamily="@font/toyz"
        android:gravity="center"
        android:text="1999"
        android:textSize="20sp"
        android:textStyle="bold" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/img_star_1"
            android:layout_width="18dp"
            android:layout_height="18dp"
            app:srcCompat="@drawable/icon_level_star_grey" />

        <ImageView
            android:id="@+id/img_star_2"
            android:layout_width="18dp"
            android:layout_height="18dp"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="2dp"
            app:srcCompat="@drawable/icon_level_star_grey" />

        <ImageView
            android:id="@+id/img_star_3"
            android:layout_width="18dp"
            android:layout_height="18dp"
            app:srcCompat="@drawable/icon_level_star_grey" />
    </LinearLayout>

</LinearLayout>

введите сюда описание изображения


Ответы (0 шт):