/** 選択カードの確認拡大表示 */
  private void viewSelectedBigCardDisp() {
    // 表示を一旦クリア
    this.finish();
    this.bigCards.clear();

    // 選択した3つを中央に表示
    // 多少拡大する
    ArrayList<BattleCardView> cards = this.activity.myInfo.getSelectedCard();

    int posX = 10;
    int posY = 160;
    float tmpDensity = this.activity.getResources().getDisplayMetrics().density;
    int myCardMarginX =
        (int)
            ((new Float(this.activity.baseLayout.getWidth()) / tmpDensity - (new Float(posX) * 2))
                / 3);

    int length = cards.size();
    for (int i = 0; i < length; i++) {
      // Densityの値を取得

      BattleCardView viewCard =
          (BattleCardView)
              ((LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
                  .inflate(R.layout.my_cards_big, null);

      viewCard.setControlActivity(this.activity);

      BattleLayout.LayoutParams cartParams =
          new BattleLayout.LayoutParams(
              (int) (this.activity.getResources().getDimensionPixelSize(R.dimen.big_card_width)),
              (int) (this.activity.getResources().getDimensionPixelSize(R.dimen.big_card_height)));
      cartParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
      cartParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
      cartParams.setMargins(
          (int) ((posX + (myCardMarginX * i)) * tmpDensity), (int) (posY * tmpDensity), 0, 0);
      viewCard.setBeetleCard(cards.get(i).getCardInfo());
      viewCard.setUpFlag(true);
      viewCard.flippedCardFace();

      // 参照を保持する
      this.bigCards.add(viewCard);

      // 戦闘ベース部品にcard追加する
      this.activity.baseLayout.addView(viewCard, 0, cartParams);
    }

    // 合計パネルを右上に表示
    this.viewTotal(200, 10);
    this.calcAndViewTotal(cards);

    this.setDealButton();
  }
  /**
   * 3枚拡大表示Viewから、対応する通常サイズカードViewを見つける
   *
   * @param bigCard
   * @return
   */
  private BattleCardView searchCardFromBigCard(BattleCardView bigCard) {

    BattleCardView view = null;
    BeetleCard info = bigCard.getCardInfo();
    ArrayList<BattleCardView> cards = this.activity.myInfo.getSelectedCard();
    for (BattleCardView selectedCard : cards) {
      if (info.equals(selectedCard.getCardInfo())) {
        // 一致したら入れ替える
        view = selectedCard;
        view.setUpFlag(false);
        break;
      }
    }
    return view;
  }
  /** 攻撃力と守備力の合計値を算出して表示する */
  private void calcAndViewTotal(ArrayList<BattleCardView> cards) {

    this.totalAttack = 0;
    this.totalDefense = 0;

    // 合計値加算
    for (BattleCardView card : cards) {
      int type = card.getCardInfo().getType();
      if (type == 3) {
        // 攻撃力加算
        this.totalAttack += card.getCardInfo().getAttack();
      } else if (type == 4) {
        // 守備力加算
        this.totalDefense += card.getCardInfo().getDefense();
      }
    }
    // 攻撃力合計
    ((TextView) this.activity.findViewById(R.id.battle_total_attack))
        .setText(Integer.toString(this.totalAttack));

    // 守備力合計
    ((TextView) this.activity.findViewById(R.id.battle_total_defense))
        .setText(Integer.toString(this.totalDefense));
  }
  /**
   * カード詳細を画面に表示する
   *
   * @param left
   * @param top
   */
  public void viewDetailCards(View view, int left, int top) {

    BattleCardView card = (BattleCardView) view;

    // Densityの値を取得
    float tmpDensity = this.activity.getResources().getDisplayMetrics().density;

    // CARD用View取得
    this.myViewCardDerail =
        ((LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
            .inflate(R.layout.card_detailview, null);

    int posLeft = (int) (this.activity.baseLayout.getWidth() / 2 - 266 * tmpDensity / 2);

    BattleLayout.LayoutParams cartParams =
        new BattleLayout.LayoutParams((int) (266 * tmpDensity), (int) (400 * tmpDensity));
    cartParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
    cartParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    cartParams.setMargins((int) (posLeft), (int) (top * tmpDensity), 0, 0);

    // 名前
    ((TextView) this.myViewCardDerail.findViewById(R.id.carddetail_name))
        .setText(card.getCardInfo().getName());

    // 画像設定
    ((ImageView) this.myViewCardDerail.findViewById(R.id.carddetail_icon))
        .setImageResource(card.getCardInfo().getImageResourceId(this.activity));

    // 属性設定
    CardAttribute attr = card.getCardInfo().getAttribute();
    if (attr == CardAttribute.FIRE) {
      ((ImageView) this.myViewCardDerail.findViewById(R.id.carddetail_attrribute))
          .setImageResource(R.drawable.fire);
    } else if (attr == CardAttribute.WATER) {
      ((ImageView) this.myViewCardDerail.findViewById(R.id.carddetail_attrribute))
          .setImageResource(R.drawable.water);
    } else if (attr == CardAttribute.WIND) {
      ((ImageView) this.myViewCardDerail.findViewById(R.id.carddetail_attrribute))
          .setImageResource(R.drawable.wind);
    }

    int type = card.getCardInfo().getType();
    if (type == 3) {

      // 背景設定
      ((RelativeLayout) this.myViewCardDerail.findViewById(R.id.carddetail_bg))
          .setBackgroundResource(R.drawable.card_red);

      // 攻、守
      // 表示文字設定
      ((TextView) this.myViewCardDerail.findViewById(R.id.carddetail_atk))
          .setText("攻撃:" + Integer.toString(card.getCardInfo().getAttack()));
    }
    if (type == 4) {

      // 背景設定
      ((RelativeLayout) this.myViewCardDerail.findViewById(R.id.carddetail_bg))
          .setBackgroundResource(R.drawable.card_blue);

      // 攻、守
      // 表示文字設定
      ((TextView) this.myViewCardDerail.findViewById(R.id.carddetail_def))
          .setText("守備:" + Integer.toString(card.getCardInfo().getDefense()));
    }

    // 説明
    ((TextView) this.myViewCardDerail.findViewById(R.id.carddetail_intoro))
        .setText("説明:" + card.getCardInfo().getIntroduction());

    // 戦闘ベース部品にカード詳細を追加する
    this.activity.baseLayout.addView(this.myViewCardDerail, cartParams);
  }
  @Override
  public void moveCard(BattleCardView view, int action) {

    if (this.activity.myInfo.getStatus(view) == null) {

      for (BattleCardView card : this.bigCards) {
        if ((view.equals(card))
            && (action == 1)
            && (BattleSceneCardSelection.threeCardselected == true)) {
          // カードと押されたカードが同じで、且つ下げイベントで且つ、3枚選択されている状態の場合

          // 下げるビューを見つける。

          view = this.searchCardFromBigCard(card);
          if (view != null) {
            break;
          }
        }
      }
      if (this.activity.myInfo.getStatus(view) == null) {
        // 入れ替えてもなおNULLなら何もしない
        return;
      }
    }

    int status = this.activity.myInfo.getStatus((BattleCardView) view);
    // カードのステータスが 手札、手札から選択の場合、上げ下げ可能
    // Densityの値を取得
    float tmpDensity = this.activity.getResources().getDisplayMetrics().density;

    if (status == 1) {
      // カードを押さえてカードより上の座標ずらしたら、カードを上にずらす。
      if ((action == 0) && (BattleSceneCardSelection.threeCardselected == false)) {
        BattleLayout.LayoutParams params = (BattleLayout.LayoutParams) view.getLayoutParams();
        params.setMargins(
            (int) ((view).getStartPosLeft() * tmpDensity),
            (int) (((view).getStartPosTop() - 20) * tmpDensity),
            0,
            0);
        view.setLayoutParams(params);

        // 選択
        this.activity.myInfo.selectCard(view);

        // 選択状況を解析
        this.analyzeSelectCards();
      }
    } else if (status == 2) {
      // カードを押さえてカードより下の座標にずらしたらカードを元の位置にに戻す
      if (action == 1) {

        if (BattleSceneCardSelection.threeCardselected == true) {

          this.rollbackBefoeThreeSelect();
        }

        BattleLayout.LayoutParams params = (BattleLayout.LayoutParams) view.getLayoutParams();
        params.setMargins(
            (int) ((view).getStartPosLeft() * tmpDensity),
            (int) (((view).getStartPosTop()) * tmpDensity),
            0,
            0);
        view.setLayoutParams(params);

        // 選択解除
        this.activity.myInfo.dealCard(view);

        // 選択状況を解析
        this.analyzeSelectCards();
      }
    }
  }