Android Open Source - GhostStories Ghost Deck View






From Project

Back to project page GhostStories.

License

The source code is released under:

GNU General Public License

If you think the Android project GhostStories listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package games.ghoststories.views.aux_area;
//from   w w w .  ja v  a  2 s.c om
import games.ghoststories.data.DragData;
import games.ghoststories.data.GhostData;
import games.ghoststories.data.GhostDeckData;
import games.ghoststories.data.GhostStoriesBitmaps;
import games.ghoststories.data.interfaces.IGhostDeckListener;
import games.ghoststories.enums.EDragItem;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.AttributeSet;
import android.util.Log;

import com.interfaces.IDraggable;
import com.utils.ImageViewUtils;
import com.views.NumberedImageView;

/**
 * View that represents the ghost deck. The ghost deck can either have the top
 * card face down or face up. If the top card is face up and it is the correct
 * game phase then this supports dragging and dropping the card onto the
 * player game boards.
 */
public class GhostDeckView extends NumberedImageView implements 
IGhostDeckListener, IDraggable<DragData> {
   
   /**
    * Constructor
    * @param pContext
    */
   public GhostDeckView(Context pContext) {
      super(pContext);
      setShowNumber(false);
   }
   
   /**
    * Constructor
    * @param pContext
    * @param pAttrs
    */
   public GhostDeckView(Context pContext, AttributeSet pAttrs) {
      this(pContext, pAttrs, 0);
      setShowNumber(false);
   }
   
   /**
    * Constructor
    * @param pContext
    * @param pAttrs
    * @param pDefStyle
    */
   public GhostDeckView(Context pContext, AttributeSet pAttrs, int pDefStyle) {
      super(pContext, pAttrs, pDefStyle); 
      setShowNumber(false);
   }     
   
   /*
    * (non-Javadoc)
    * @see com.views.IDraggable#getDragData()
    */
   public DragData getDragData() {    
      return new DragData(EDragItem.GHOST_CARD, mGhostDeckData.getTopCard(), this);
   }
   
   /*
    * (non-Javadoc)
    * @see games.ghoststories.data.IGhostDeckListener#ghostDeckUpdated()
    */
   public void ghostDeckUpdated() {
      GhostData topCard = mGhostDeckData.getTopCard();
      if(topCard.isFlipped()) {
         //Top card is flipped over so update the bitmap
         if(topCard.isDragging()) {
            //showCardBack(topCard);
            //TODO What to show on deck when card is being dragged?
            flipTopCard();
         } else {
            flipTopCard();   
         }         
      } else {         
         //Top card is not flipped so load the back of the card and load the 
         //ready the top card bitmap  
         showCardBack(topCard);
         
         setNumber(mGhostDeckData.getNumGhosts());
         loadTopCardBitmap();
      }
   }  
   
   /**
    * Sets the ghost deck data model for this view
    * @param pGhostDeckData
    */
   public void setGhostDeckData(GhostDeckData pGhostDeckData) {
      mGhostDeckData = pGhostDeckData;        
      setNumber(mGhostDeckData.getNumGhosts()); 
      setShowNumber(false);
      
      //Load the top card bitmap so it is ready when it needs to be flipped
      loadTopCardBitmap();
      
      mGhostDeckData.addGhostDeckListener(this);
   }     
   
   /**
    * Called when the ghost deck is updated. Render the new top card and 
    * update the count.
    */
   private void flipTopCard() {      
      //If the top card is loaded then set it on the UI thread. If the top 
      //card is not yet loaded wait for it to load and then set it on the UI
      //thread
      if(mTopCardBitmap != null) {
         ImageViewUtils.setImageBitmap(this, mTopCardBitmap);
      } else {
         //Card is not yet loaded. Push a runnable onto the thread doing the
         //loading. When this task runs the image should be loaded.
         sExecutor.execute(new Runnable() {
            public void run() {             
               if(mTopCardBitmap != null) { //This better be true
                  ImageViewUtils.setImageBitmap(GhostDeckView.this, mTopCardBitmap);
               } else {
                  Log.e("GhostDeckView", "Error loading bitmap");
               }
            }
         });
      }
   }
   
   /**
    * Loads the bitmap of the top card on the ghost deck. We do this as soon 
    * as the previous top card is removed from the deck so it is ready when
    * the player flips the top card. Push the task off onto a background thread
    * to ensure that it is loaded before trying to show it in {@link #flipTopCard()}.
    */
   private void loadTopCardBitmap() {      
      sExecutor.execute(new Runnable() {
         public void run() {          
            mTopCardBitmap = 
                  BitmapFactory.decodeResource(getResources(), 
                        mGhostDeckData.getTopCard().getImageId());  
         }
      });
   }
   
   /**
    * Sets the bitmap for this view to the back of the card. The view varies 
    * depending on whether the card is a WuFeng card or regular ghost card.
    * @param pCard The top card
    */
   private void showCardBack(GhostData pCard) {
      if(pCard.isWuFeng()) {
         ImageViewUtils.setImageBitmap(this, GhostStoriesBitmaps.sWuFengCardBitmap);   
      } else {
         ImageViewUtils.setImageBitmap(this, GhostStoriesBitmaps.sGhostCardBitmap);
      }
   }
   
   /** Thread used to preload the top card bitmap **/
   private static final Executor sExecutor = Executors.newSingleThreadExecutor();
   
   /** Model for this view **/
   private GhostDeckData mGhostDeckData;
   /** Bitmap of the current top card **/
   private Bitmap mTopCardBitmap = null;
}




Java Source Code List

com.drawable.shapes.GradientRectangle.java
com.interfaces.IDraggable.java
com.utils.AndroidUtils.java
com.utils.AnimationUtils2.java
com.utils.ImageLoadingTask.java
com.utils.ImageRotationTask.java
com.utils.ImageViewUtils.java
com.views.NumberedImageView.java
com.views.ToggledImageView.java
com.views.layouts.ScaledLinearLayout.java
com.views.layouts.ScaledRelativeLayout.java
com.views.layouts.SquareGridLayout.java
com.views.layouts.SquareLinearLayout.java
com.views.layouts.SquareTableLayout.java
com.views.layouts.ZoomableRelativeLayout.java
com.views.listeners.DragTouchListener.java
games.ghoststories.activities.GameLoadingActivity.java
games.ghoststories.activities.GameScreenActivity.java
games.ghoststories.activities.TitleActivity.java
games.ghoststories.controllers.GhostDeckController.java
games.ghoststories.controllers.HaunterController.java
games.ghoststories.controllers.PlayerBoardCardController.java
games.ghoststories.controllers.VillageTileController.java
games.ghoststories.controllers.combat.CombatAreaController.java
games.ghoststories.controllers.combat.DiceDragListener.java
games.ghoststories.controllers.combat.GhostDragListener.java
games.ghoststories.controllers.combat.TaoTokenDragListener.java
games.ghoststories.data.DragData.java
games.ghoststories.data.GameBoardData.java
games.ghoststories.data.GhostData.java
games.ghoststories.data.GhostDeckData.java
games.ghoststories.data.GhostGraveyardData.java
games.ghoststories.data.GhostStoriesBitmaps.java
games.ghoststories.data.GhostStoriesConstants.java
games.ghoststories.data.GhostStoriesGameManager.java
games.ghoststories.data.PlayerData.java
games.ghoststories.data.TokenSupplyData.java
games.ghoststories.data.interfaces.IGameBoardListener.java
games.ghoststories.data.interfaces.IGamePhaseListener.java
games.ghoststories.data.interfaces.IGameTokenListener.java
games.ghoststories.data.interfaces.IGhostDeckListener.java
games.ghoststories.data.interfaces.IGhostListener.java
games.ghoststories.data.interfaces.ITokenListener.java
games.ghoststories.data.interfaces.IVillageTileListener.java
games.ghoststories.data.village.BuddhistTempleTileData.java
games.ghoststories.data.village.CircleOfPrayerTileData.java
games.ghoststories.data.village.VillageTileDataFactory.java
games.ghoststories.data.village.VillageTileData.java
games.ghoststories.enums.EBoardLocation.java
games.ghoststories.enums.ECardLocation.java
games.ghoststories.enums.EColor.java
games.ghoststories.enums.ECombatPhase.java
games.ghoststories.enums.EDiceSide.java
games.ghoststories.enums.EDice.java
games.ghoststories.enums.EDifficulty.java
games.ghoststories.enums.EDragItem.java
games.ghoststories.enums.EGamePhase.java
games.ghoststories.enums.EGhostAbility.java
games.ghoststories.enums.EHaunterLocation.java
games.ghoststories.enums.EPlayerAbility.java
games.ghoststories.enums.ETileLocation.java
games.ghoststories.enums.EVillageTile.java
games.ghoststories.fragments.AuxAreaFragment.java
games.ghoststories.fragments.GameboardFragment.java
games.ghoststories.utils.BitmapUtils.java
games.ghoststories.utils.GameUtils.java
games.ghoststories.utils.XmlUtils.java
games.ghoststories.views.GameScreen.java
games.ghoststories.views.aux_area.CardInfoView.java
games.ghoststories.views.aux_area.GamePhaseDetailsView.java
games.ghoststories.views.aux_area.GamePhaseView.java
games.ghoststories.views.aux_area.GhostDeckView.java
games.ghoststories.views.aux_area.GhostGraveyardCardView.java
games.ghoststories.views.aux_area.PlayerInfoView.java
games.ghoststories.views.combat.CombatDamageView.java
games.ghoststories.views.combat.CombatDiceAreaView.java
games.ghoststories.views.combat.CombatDiceView.java
games.ghoststories.views.combat.CombatGhostView.java
games.ghoststories.views.combat.CombatInstructionsView.java
games.ghoststories.views.combat.CombatRollView.java
games.ghoststories.views.combat.CombatView.java
games.ghoststories.views.combat.ExtraCombatDiceView.java
games.ghoststories.views.combat.GhostHealthView.java
games.ghoststories.views.common.AbstractNumberedTokenView.java
games.ghoststories.views.common.BuddhaTokenView.java
games.ghoststories.views.common.QiTokenView.java
games.ghoststories.views.common.TaoTokenView.java
games.ghoststories.views.common.YinYangTokenView.java
games.ghoststories.views.gameboard.PlayerAreaView.java
games.ghoststories.views.gameboard.PlayerBoardCardView.java
games.ghoststories.views.gameboard.PlayerBoardView.java
games.ghoststories.views.gameboard.PlayerTokenAreaView.java
games.ghoststories.views.gameboard.VillageTileView.java
games.ghoststories.views.graveyard.GraveyardScrollView.java
games.ghoststories.views.graveyard.GraveyardView.java
games.ghoststories.views.title.TitleButton.java
games.ghoststories.views.title.TitleScreen.java
games.ghoststories.views.village.CircleOfPrayerView.java