package com.example.tcg.adapters; import android.content.Context; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.example.tcg.Carta; import com.example.tcg.R; import java.util.ArrayList; import java.util.function.Consumer; // Adaptador responsável por exibir uma lista de cartas em um ListView ou GridView public class CartaAdapter extends BaseAdapter { private Context context; //contexto da activity onde a carta é usado private ArrayList cartas; //listas de cartas a serem vendidas private Consumer onVenderClick; //função a ser chamada quando clickado para vender // Construtor do adaptador public CartaAdapter(Context context, ArrayList cartas, Consumer onVenderClick) { this.context = context; this.cartas = cartas; this.onVenderClick = onVenderClick; } @Override public int getCount() { return cartas.size(); } @Override public Object getItem(int position) { return cartas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { Carta carta = cartas.get(position); if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.item_carta, parent, false); } ImageView imagemCarta = convertView.findViewById(R.id.imagemCarta); TextView textoNome = convertView.findViewById(R.id.textoNomeCarta); TextView textoRaridade = convertView.findViewById(R.id.textoRaridade); Button botaoVender = convertView.findViewById(R.id.botaoVender); View cartaLayout = convertView.findViewById(R.id.cartaLayout); // Define nome e raridade textoNome.setText(carta.getNome()); textoRaridade.setText(carta.getRaridade()); // Define imagem int resId = context.getResources().getIdentifier(carta.getImagem(), "drawable", context.getPackageName()); imagemCarta.setImageResource(resId); // Mostrar o valor no botão int valor = getValorCarta(carta.getRaridade()); botaoVender.setText("Vender (" + valor + " ouro)"); // Define a cor/borda conforme raridade switch (carta.getRaridade()) { case "Comum": textoRaridade.setTextColor(Color.parseColor("#607D8B")); // cinza azulado cartaLayout.setBackgroundResource(R.drawable.borda_comum); break; case "Incomum": textoRaridade.setTextColor(Color.parseColor("#4CAF50")); // verde elegante cartaLayout.setBackgroundResource(R.drawable.borda_incomum); break; case "Rara": textoRaridade.setTextColor(Color.parseColor("#7E57C2")); // roxo cartaLayout.setBackgroundResource(R.drawable.borda_rara); break; case "Épica": cartaLayout.setBackgroundResource(R.drawable.borda_epica); textoRaridade.setTextColor(0xFF6A1B9A); // roxo vibrante break; case "Lendária": cartaLayout.setBackgroundResource(R.drawable.borda_lendaria); textoRaridade.setTextColor(0xFFFFD600); // dourado break; case "Especial": cartaLayout.setBackgroundResource(R.drawable.borda_especial); textoRaridade.setTextColor(0xFFFF7D7D); // vermelho break; } // Clique com animação botaoVender.setOnClickListener(v -> { animarVenda(cartaLayout, () -> { onVenderClick.accept(carta); Toast.makeText(context, "Carta vendida!", Toast.LENGTH_SHORT).show(); }); }); imagemCarta.setOnClickListener(v -> mostrarCartaAmpliada(carta)); return convertView; } // Retorna o valor da carta conforme raridade private int getValorCarta(String raridade) { switch (raridade) { case "Comum": return 10; case "Incomum": return 25; case "Rara": return 50; case "Épica": return 100; case "Lendária": return 200; case "Especial": return 500; default: return 0; } } // Pequena animação ao vender (fade + scale) private void animarVenda(View view, Runnable onComplete) { view.animate() .alpha(0f) .scaleX(0.85f) .scaleY(0.85f) .setDuration(300) .withEndAction(() -> { view.setAlpha(1f); view.setScaleX(1f); view.setScaleY(1f); onComplete.run(); }) .start(); } private void mostrarCartaAmpliada(Carta carta) { android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(context); View dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_carta_ampliada, null); ImageView imagemAmpliada = dialogView.findViewById(R.id.imagemCartaAmpliada); TextView nomeAmpliado = dialogView.findViewById(R.id.nomeCartaAmpliada); TextView raridadeAmpliada = dialogView.findViewById(R.id.raridadeCartaAmpliada); View cartaLayout = dialogView.findViewById(R.id.cartaLayoutAmpliada); // container para a borda nomeAmpliado.setText(carta.getNome()); raridadeAmpliada.setText(carta.getRaridade()); int resId = context.getResources().getIdentifier(carta.getImagem(), "drawable", context.getPackageName()); if (resId != 0) { imagemAmpliada.setImageResource(resId); } // Define a borda conforme raridade (mesmo estilo da PacotesActivity) switch (carta.getRaridade()) { case "Comum": cartaLayout.setBackgroundResource(R.drawable.borda_comum); raridadeAmpliada.setTextColor(Color.parseColor("#607D8B")); break; case "Incomum": cartaLayout.setBackgroundResource(R.drawable.borda_incomum); raridadeAmpliada.setTextColor(Color.parseColor("#4CAF50")); break; case "Rara": cartaLayout.setBackgroundResource(R.drawable.borda_rara); raridadeAmpliada.setTextColor(Color.parseColor("#7E57C2")); break; case "Épica": cartaLayout.setBackgroundResource(R.drawable.borda_epica); raridadeAmpliada.setTextColor(Color.parseColor("#6A1B9A")); break; case "Lendária": cartaLayout.setBackgroundResource(R.drawable.borda_lendaria); raridadeAmpliada.setTextColor(Color.parseColor("#FFD600")); break; case "Especial": cartaLayout.setBackgroundResource(R.drawable.borda_especial); raridadeAmpliada.setTextColor(Color.parseColor("#ef736c")); break; } builder.setView(dialogView); android.app.AlertDialog dialog = builder.create(); // Fundo transparente e animação de entrada if (dialog.getWindow() != null) { dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); dialog.getWindow().getAttributes().windowAnimations = android.R.style.Animation_Dialog; } dialog.show(); } }