package com.znv.linkup.view; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.AttributeSet; import android.view.View; import android.widget.RelativeLayout; import com.znv.linkup.BaseActivity; import com.znv.linkup.R; import com.znv.linkup.ViewSettings; import com.znv.linkup.core.Game; import com.znv.linkup.core.GameSettings; import com.znv.linkup.core.card.Piece; import com.znv.linkup.core.card.PiecePair; import com.znv.linkup.core.util.ImageUtil; /** * 管理界面游戏卡片集合 * * @author yzb * */ public class CardsView extends RelativeLayout { public CardsView(Context context) { super(context); } public CardsView(Context context, AttributeSet attrs) { super(context, attrs); } public void setGame(Game game) { this.game = game; // 加载界面图片 // String skinName = game.getLevelCfg().getGameSkin(); // loadImages(skinName); // 生成游戏卡片 createCards(false); } /** * 选择卡片 * * @param piece */ public void check(Piece piece) { gameCards[piece.getIndexY()][piece.getIndexX()].setChecked(true); } /** * 取消选择卡片 * * @param piece */ public void unCheck(Piece piece) { gameCards[piece.getIndexY()][piece.getIndexX()].setChecked(false); } /** * 提示卡片对 * * @param pair */ public void prompt(PiecePair pair) { gameCards[pair.getPieceOne().getIndexY()][pair.getPieceOne().getIndexX()].prompt(); gameCards[pair.getPieceTwo().getIndexY()][pair.getPieceTwo().getIndexX()].prompt(); } /** * 取消提示卡片对 * * @param pair */ public void unPrompt(PiecePair pair) { gameCards[pair.getPieceOne().getIndexY()][pair.getPieceOne().getIndexX()].unPrompt(); gameCards[pair.getPieceTwo().getIndexY()][pair.getPieceTwo().getIndexX()].unPrompt(); } /** * 移除卡片 * * @param piece */ public void erase(Piece piece) { removeView(gameCards[piece.getIndexY()][piece.getIndexX()]); gameCards[piece.getIndexY()][piece.getIndexX()] = null; } /** * 生成游戏卡片 * * @param isAnim * 是否应用动画 */ public void createCards(boolean isAnim) { String skinName = game.getLevelCfg().getGameSkin(); List<Bitmap> scaleBitmaps = loadImages(skinName); removeAllViews(); gameCards = new GameCard[game.getPieces().length][game.getPieces()[0].length]; GameCard card = null; for (int i = 0; i < game.getPieces().length; i++) { for (int j = 0; j < game.getPieces()[i].length; j++) { Piece p = game.getPieces()[i][j]; if (p.getImageId() != GameSettings.GroundCardValue) { Bitmap pbm = null; if (p.getImageId() == GameSettings.ObstacleCardValue) { pbm = ImageUtil.scaleBitmap(obstacleBitmap, p.getWidth(), p.getHeight()); } else { pbm = scaleBitmaps.get(p.getImageId() - 1); } card = new GameCard(getContext()); // 需要先addView,再设置Piece addView(card, p.getWidth(), p.getHeight()); card.setPiece(p, pbm, isAnim); card.setOnClickListener(cardClickHandler); gameCards[i][j] = card; } else { gameCards[i][j] = null; } } } } private final OnClickListener cardClickHandler = new OnClickListener() { public void onClick(View v) { game.click(((GameCard) v).getPiece()); } }; /** * 根据皮肤加载图片,并加入缓存 * * @param skinName * 皮肤名称 * @return 图片列表 */ private List<Bitmap> getSkinImages(String skinName) { int index = 0; for (int i = 0; i < ViewSettings.SkinNames.length; i++) { if (ViewSettings.SkinNames[i].equalsIgnoreCase(skinName)) { index = i; break; } } while (BaseActivity.skinImages.get(index) == null) { try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } return BaseActivity.skinImages.get(index); } /** * 根据皮肤加载图片 */ private List<Bitmap> loadImages(String skinName) { int scaleWidth = game.getPieces()[0][0].getWidth(); int scaleHeight = game.getPieces()[0][0].getHeight(); String scaleKey = String.format("%s_%s_%s", skinName, String.valueOf(scaleWidth), String.valueOf(scaleHeight)); if (!BaseActivity.scaleImages.containsKey(scaleKey)) { // 根据皮肤获取图片列表 List<Bitmap> images = getSkinImages(skinName); // 加载到缓存 List<Bitmap> scaleBms = new ArrayList<Bitmap>(); for (Bitmap bm : images) { scaleBms.add(ImageUtil.scaleBitmap(bm, scaleWidth, scaleHeight)); } BaseActivity.scaleImages.put(scaleKey, scaleBms); } return BaseActivity.scaleImages.get(scaleKey); // Piece[][] pieces = game.getPieces(); // for (int i = 0; i < pieces.length; i++) { // for (int j = 0; j < pieces[i].length; j++) { // Piece piece = pieces[i][j]; // if (piece != null) { // // 设置游戏卡片和障碍卡片 // if (piece.getImageId() == GameSettings.ObstacleCardValue) { // Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.obstacle); // piece.setImage(ImageUtil.scaleBitmap(bm, piece.getWidth(), piece.getHeight())); // } else if (piece.getImageId() != GameSettings.GroundCardValue) { // // 根据需要缩放图片 // piece.setImage(ImageUtil.scaleBitmap(images.get(piece.getImageId() - 1), piece.getWidth(), piece.getHeight())); // } // } // } // } } private Game game; private GameCard[][] gameCards = null; private Bitmap obstacleBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.obstacle); }