TrabalhoAvaliacaoLP/app/src/main/java/com/example/tcg/adapters/CartaAdapter.java

208 lines
7.9 KiB
Java

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<Carta> cartas; //listas de cartas a serem vendidas
private Consumer<Carta> onVenderClick; //função a ser chamada quando clickado para vender
// Construtor do adaptador
public CartaAdapter(Context context, ArrayList<Carta> cartas, Consumer<Carta> 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();
}
}