package com.znv.linkup; import java.util.List; import android.annotation.SuppressLint; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.widget.LinearLayout; import android.widget.Toast; import com.znv.linkup.core.config.LevelCfg; import com.znv.linkup.core.config.RankCfg; import com.znv.linkup.db.DbScore; import com.znv.linkup.db.LevelScore; import com.znv.linkup.rest.UserScore; import com.znv.linkup.view.dialog.ConfirmDialog; import com.znv.linkup.view.indicator.CirclePageIndicator; import com.znv.linkup.view.indicator.Rank; import com.znv.linkup.view.indicator.RankAdapter; /** * 关卡选择界面活动处理类 * * @author yzb * */ public class RankActivity extends BaseActivity implements OnPageChangeListener { private int modeIndex = -1; private RankAdapter rankAdapter = null; private List<RankCfg> rankCfgs = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_rank); // 初始化游戏等级 initRank(); new RankAsyncTask().execute(); } @Override protected void playMusic() { } @Override protected void stopMusic() { } /** * 初始化游戏等级 */ private void initRank() { LinearLayout root = (LinearLayout) RankActivity.this.findViewById(R.id.rankBg); int index = getIntent().getIntExtra("modeIndex", 0); if (index != modeIndex) { rankCfgs = modeCfgs.get(index).getRankInfos(); } // root.setBackgroundResource(ViewSettings.GameBgImageIds[rankCfgs.get(0).getRankBackground()]); root.setBackgroundColor(getResources().getColor(ViewSettings.RankBgColors[rankCfgs.get(0).getRankBackground()])); } /** * 切换背景图片 */ @Override public void onPageSelected(int arg0) { soundMgr.pageChanged(); LinearLayout root = (LinearLayout) RankActivity.this.findViewById(R.id.rankBg); root.setBackgroundColor(getResources().getColor(ViewSettings.RankBgColors[rankCfgs.get(arg0).getRankBackground()])); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onResume() { super.onResume(); if (rankAdapter != null) { rankAdapter.changeRankCfgs(rankCfgs, false); } } /** * 处理网络消息回调的handler */ @SuppressLint("HandlerLeak") public Handler netMsgHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case ViewSettings.MSG_UPDATE_GOLD: { Toast.makeText(RankActivity.this, R.string.unlock_success_msg, Toast.LENGTH_SHORT).show(); } break; case ViewSettings.MSG_NETWORK_EXCEPTION: { Toast.makeText(RankActivity.this, R.string.network_exception, Toast.LENGTH_SHORT).show(); } break; } } }; /** * 异步加载关卡 * * @author yzb * */ private class RankAsyncTask extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { int index = getIntent().getIntExtra("modeIndex", 0); if (index != modeIndex) { modeIndex = index; // 等待线程创建完成 while (rankAdapters == null || rankAdapters.length <= modeIndex || rankAdapters[modeIndex] == null) { try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } // 使用缓存数据 rankAdapter = rankAdapters[modeIndex]; rankAdapter.setLevelListener(new Rank.ISelectedLevel() { @Override public void onSelectedLevel(final LevelCfg levelCfg) { soundMgr.select(); if (levelCfg.isActive()) { Intent intent = new Intent(RankActivity.this, GameActivity.class); intent.putExtra("levelIndex", levelCfg.getLevelId()); startActivity(intent); // activity切换动画 // overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out); } else { if (userInfo != null && userInfo.getDiamond(RankActivity.this) >= 5) { ConfirmDialog dialog = new ConfirmDialog(RankActivity.this); dialog.setTitle(RankActivity.this.getString(R.string.unlock_title)); dialog.setMessage(RankActivity.this.getString(R.string.unlock_msg, levelCfg.getRankName() + "-" + levelCfg.getLevelName())); dialog.setPositiveButton(new View.OnClickListener() { @Override public void onClick(View v) { // 消耗钻石 userInfo.addDiamond(RankActivity.this, -5); // 更新网络钻石数 UserScore.updateAward(userInfo.getUserId(), -5, 0, RankActivity.this.netMsgHandler); // 解锁关卡 levelCfg.setActive(true); LevelScore nls = new LevelScore(levelCfg.getLevelId()); nls.setIsActive(1); DbScore.updateActive(nls); // 进入关卡 Intent intent = new Intent(RankActivity.this, GameActivity.class); intent.putExtra("levelIndex", levelCfg.getLevelId()); startActivity(intent); } }); dialog.show(); } } } }); } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); ViewPager pager = (ViewPager) findViewById(R.id.pager); pager.setAdapter(rankAdapter); // 设置Indicator CirclePageIndicator mIndicator = (CirclePageIndicator) findViewById(R.id.indicator); mIndicator.setViewPager(pager); mIndicator.setOnPageChangeListener(RankActivity.this); // 更新 rankAdapter.changeRankCfgs(rankCfgs, false); } } }