Привет, ребята, я все еще новичок в Android, и я пытаюсь создать небольшой проект для тестирования. Я пытаюсь создать карточную игру. Для нижнего игрока я хочу отобразить ресайклинг со всеми картами в руке. Я хочу, чтобы изображения карт перекрывались друг с другом и когда игралась карта, чтобы пересчитать перекрытие, чтобы соответствовать ширине родительского вида ресайклера. И когда сумма ширины карты меньше ширины просмотров ресайклера, я хочу, чтобы они отображались без перекрытия и центра в режиме просмотра.Как создать автоматически изменяемый размер изображения в обзоре recycler
Я просто не могу узнать, какой метод использовать. Я использую ItemDecoration для создания перекрытия, но когда я добавляю overlapping match_parent, это не работает.
Это мой обзор для игры.
<RelativeLayout>
<!-- Bottom Player -->
<LinearLayout android:id="@+id/bottom"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_below="@+id/middle_section"
android:orientation="vertical"
android:paddingLeft="2dip"
android:paddingRight="2dip">
<TextView android:id="@+id/player1_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
<android.support.v7.widget.RecyclerView
android:id="@+id/player1_cards_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
</LinearLayout>
</RelativeLayout>
Это игрок рука расположение:
<android.support.v7.widget.CardView
android:id="@+id/player_hand"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/player_card"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:adjustViewBounds="true" />
</RelativeLayout>
</android.support.v7.widget.CardView>
Тогда у меня есть вид утилизатор адаптер:
public class PlayerHandRecyclerViewAdapter extends RecyclerView.Adapter<PlayerHandRecyclerViewHolder> {
private ArrayList<Card> _cards = new ArrayList<Card>();
private Context _context;
public PlayerHandRecyclerViewAdapter(Context context, ArrayList<Card> cards) {
this._context = context;
this._cards = cards;
}
@Override
public PlayerHandRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//Inflate the layout, initialize the View Holder
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.player_hand, parent, false);
PlayerHandRecyclerViewHolder holder = new PlayerHandRecyclerViewHolder(v, parent);
return holder;
}
@Override
public void onBindViewHolder(PlayerHandRecyclerViewHolder holder, int position) {
int width = holder.playerHandView.getWidth();
int height = holder.playerHandView.getHeight();
//Use the provided View Holder on the onCreateViewHolder method to populate the current row on the RecyclerView
holder.imageView.setImageResource(_cards.get(position).getImageResourceId());
}
@Override
public int getItemCount() {
//returns the number of elements the RecyclerView will display
return _cards.size();
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
// Insert a new item to the RecyclerView on a predefined position
public void insert(int position, Card card) {
_cards.add(position, card);
notifyItemInserted(position);
}
// Remove a RecyclerView item containing a specified Data object
public void remove(Card card) {
int position = _cards.indexOf(card);
_cards.remove(position);
notifyItemRemoved(position);
}
}
Тогда у меня есть держатель:
public class PlayerHandRecyclerViewHolder extends RecyclerView.ViewHolder {
RecyclerView playerHandView;
CardView cv;
ImageView imageView;
PlayerHandRecyclerViewHolder(View itemView, ViewGroup parent) {
super(itemView);
String parentId = String.valueOf(parent.getId());
int resId = parent.getContext().getResources().getIdentifier(parentId, "id", parent.getContext().getPackageName());
playerHandView = (RecyclerView) parent.findViewById(resId);
cv = (CardView) itemView.findViewById(R.id.player_hand);
imageView = (ImageView) itemView.findViewById(R.id.player_card);
}
}
И это мой класс украшения предмета
public class PlayerHandRecyclerViewDecoration extends RecyclerView.ItemDecoration {
private final static int vertOverlap = -20;
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view);
if (position != 0) {
outRect.right = vertOverlap;
view.invalidate();
}
}
}
Я думаю, что вы действительно хотите построить LayoutManager, а не ItemDocoration. – Karakuri
@ Karakuri Да, похоже, что я делал это неправильно, я обратился к расширению LinearLayoutManager, теперь проблема заключается в том, что когда я использую обертку для просмотра изображения карты и перекрытия, я вижу только 5 изображений, потому что их начальная ширина больше, чем ширина родителя. –
public void onLayoutChildren (RecyclerView.Recycler recycler, RecyclerView.State state) { super.onLayoutChildren (recycler, state); int childCount = getChildCount(); if (childCount> 0) { for (int i = 1; i