package com.znv.linkup.view.indicator; import com.znv.linkup.R; import com.znv.linkup.ViewSettings; import com.znv.linkup.core.config.GameMode; import com.znv.linkup.core.config.LevelCfg; import com.znv.linkup.util.StringUtil; import android.content.Context; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.RatingBar; import android.widget.TextView; /** * 关卡视图 * * @author yzb * */ public class Level { private Context ctx = null; private View levelView = null; private LevelHolder levelHolder = new LevelHolder(); public Level(Context ctx, LevelCfg levelCfg) { this.ctx = ctx; LayoutInflater inflater = LayoutInflater.from(ctx); levelView = inflater.inflate(R.layout.level, null); levelHolder.tvLevel = (ImageView) levelView.findViewById(R.id.tvLevel); levelHolder.rbStar = (RatingBar) levelView.findViewById(R.id.rbStar); levelHolder.tvTime = (TextView) levelView.findViewById(R.id.tvTime); levelHolder.tvTask = (TextView) levelView.findViewById(R.id.tvTask); updateLevelView(levelCfg); } /** * 更新关卡配置 * * @param levelCfg * 关卡配置 */ public void changeLevelCfg(LevelCfg levelCfg, boolean isInit) { if (isInit || levelCfg.isActive()) { updateLevelView(levelCfg); } } /** * 获取关卡视图 * * @return 关卡视图 */ public View getLevelView() { return levelView; } /** * 获取关卡控件缓存 * * @return 关卡控件缓存 */ public LevelHolder getLevelHolder() { return levelHolder; } /** * 根据关卡配置更新一个关卡数据 * * @param levelCfg * 关卡配置 */ private void updateLevelView(LevelCfg levelCfg) { if (levelCfg.isActive()) { levelHolder.tvLevel.setBackgroundResource(R.drawable.levelbg); int level = Integer.parseInt(levelCfg.getLevelName()); levelHolder.tvLevel.setImageResource(ViewSettings.Numbers[level]); if (levelCfg.getLevelMode() == GameMode.Level) { levelHolder.rbStar.setVisibility(View.VISIBLE); levelHolder.tvTime.setVisibility(View.GONE); levelHolder.tvTask.setVisibility(View.GONE); levelHolder.rbStar.setRating(levelCfg.getLevelStar()); } else if (levelCfg.getLevelMode() == GameMode.Time || levelCfg.getLevelMode() == GameMode.Star) { levelHolder.rbStar.setVisibility(View.GONE); levelHolder.tvTime.setVisibility(View.VISIBLE); levelHolder.tvTask.setVisibility(View.GONE); levelHolder.tvTime.setText(""); if (levelCfg.getMinTime() > 0) { levelHolder.tvTime.setText(StringUtil.secondToString(levelCfg.getMinTime())); } } else if (levelCfg.getLevelMode() == GameMode.ScoreTask) { levelHolder.rbStar.setVisibility(View.GONE); levelHolder.tvTime.setVisibility(View.GONE); levelHolder.tvTask.setVisibility(View.VISIBLE); levelHolder.tvTask.setText(String.valueOf(levelCfg.getScoreTask())); if (levelCfg.getMaxScore() > 0) { Drawable drawable = ctx.getResources().getDrawable(R.drawable.pass); drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); levelHolder.tvTask.setCompoundDrawables(null, null, drawable, null); } } else if (levelCfg.getLevelMode() == GameMode.TimeTask) { levelHolder.rbStar.setVisibility(View.GONE); levelHolder.tvTime.setVisibility(View.GONE); levelHolder.tvTask.setVisibility(View.VISIBLE); levelHolder.tvTask.setText(StringUtil.secondToString(levelCfg.getTimeTask())); if (levelCfg.getMinTime() > 0) { Drawable drawable = ctx.getResources().getDrawable(R.drawable.pass); drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); levelHolder.tvTask.setCompoundDrawables(null, null, drawable, null); } } } else { levelHolder.tvLevel.setBackgroundResource(R.drawable.locked); levelHolder.rbStar.setVisibility(View.INVISIBLE); levelHolder.tvTime.setVisibility(View.GONE); levelHolder.tvTask.setVisibility(View.GONE); } } /** * 利用ViewHolder提升adapter效率 * * @author yzb * */ public class LevelHolder { ImageView tvLevel; RatingBar rbStar; TextView tvTime; TextView tvTask; } }