package com.wuyr.catchpiggy.activities; import android.media.MediaPlayer; import android.support.v7.app.AlertDialog; import android.view.View; import android.widget.FrameLayout; import com.wuyr.catchpiggy.Application; import com.wuyr.catchpiggy.R; import com.wuyr.catchpiggy.customize.views.ClassicModeView; import com.wuyr.catchpiggy.customize.views.HomeView; import com.wuyr.catchpiggy.customize.views.LevelSelectView; import com.wuyr.catchpiggy.customize.views.LoadingView; import com.wuyr.catchpiggy.customize.views.PigstyMode; import com.wuyr.catchpiggy.utils.LevelUtil; import com.wuyr.catchpiggy.utils.LogUtil; import com.wuyr.catchpiggy.utils.ThreadPool; /** * Created by wuyr on 17-7-11 下午3:27. */ public class MainActivity extends BaseActivity { public static final int HOME = 0, //主页 LEVEL_SELECT = 1,//关卡选择 CLASSIC = 2, //经典模式 PIGSTY = 3;//修猪圈模式 public int mCurrentStatus; private FrameLayout mRootView; private LoadingView mLoadingView; private HomeView mHomeView; private LevelSelectView mLevelSelectView; private ClassicModeView mClassicMode; private PigstyMode mPigstyMode; private AlertDialog mExitDialog; private MediaPlayer mPlayer; @Override protected int getLayoutId() { return R.layout.act_main_view; } protected void initView() { LogUtil.setDebugOn(true); LogUtil.setIsShowClassName(false); mRootView = findViewById(R.id.root_view); mLoadingView = findViewById(R.id.loading_view); mHomeView = findViewById(R.id.home_view); mHomeView.setOnButtonClickListener(new HomeView.OnButtonClickListener() { @Override public void onPigstyModeButtonClicked() { showFixPigstyModeLevelSelectView(); } @Override public void onClassicModeButtonClicked() { showClassicModeLevelSelectView(); } @Override public boolean onSoundButtonClicked() { //控制背景音乐 静音和恢复 boolean isMusicStopped = false; if (mPlayer != null) { if (mPlayer.isPlaying()) { mPlayer.pause(); isMusicStopped = true; } else { mPlayer.start(); } } return isMusicStopped; } @Override public void onExitButtonClicked() { onBackPressed(); } }); //初始化背景音乐 mPlayer = MediaPlayer.create(this, R.raw.background_music); mPlayer.setOnPreparedListener(MediaPlayer::start); mPlayer.setLooping(true); mPlayer.setOnErrorListener((mp, what, extra) -> { mPlayer = null; return false; }); } @Override protected boolean isStatusBarNeedImmerse() { return false; } @Override protected void onResume() { super.onResume(); //播放随机小猪跑过的动画 if (mCurrentStatus == HOME) { mHomeView.startShow(); } } /** * 修猪圈模式 关卡选择 */ private void showFixPigstyModeLevelSelectView() { if (!mLoadingView.isLoading) { //播放圆圈动画 mLoadingView.startLoad(() -> { mCurrentStatus = LEVEL_SELECT; //隐藏主页view mHomeView.setVisibility(View.GONE); mHomeView.stopShow(); //初始化关卡选择数据 mLevelSelectView = new LevelSelectView(this); mLevelSelectView.setMaxLevelCount(LevelUtil.PIGSTY_MODE_MAX_LEVEL + 1); mLevelSelectView.setValidHeartCount(Application.getPigstyModeCurrentValidHeartCount(this)); mLevelSelectView.setValidLevelCount(Application.getCurrentPigstyModeLevel(this)); mLevelSelectView.setOnLevelSelectedListener(this::startFixPigstyMode); mRootView.addView(mLevelSelectView, 0); }); } } /** * 经典模式 关卡选择 */ private void showClassicModeLevelSelectView() { if (!mLoadingView.isLoading) { //播放圆圈动画 mLoadingView.startLoad(() -> { mCurrentStatus = LEVEL_SELECT; //隐藏主页view mHomeView.setVisibility(View.GONE); mHomeView.stopShow(); //初始化关卡选择数据 mLevelSelectView = new LevelSelectView(this); mLevelSelectView.setMaxLevelCount(LevelUtil.CLASSIC_MODE_MAX_LEVEL + 1); mLevelSelectView.setValidHeartCount(Application.getClassicModeCurrentValidHeartCount(this)); mLevelSelectView.setValidLevelCount(Application.getCurrentClassicModeLevel(this)); mLevelSelectView.setOnLevelSelectedListener(this::startClassicMode); mRootView.addView(mLevelSelectView, 0); }); } } /** * 开始修猪圈模式 */ private void startFixPigstyMode(int level) { if (!mLoadingView.isLoading) { mLoadingView.startLoad(() -> { //释放关卡选择view的资源 if (mLevelSelectView != null) { mLevelSelectView.release(); mRootView.removeView(mLevelSelectView); mLevelSelectView = null; } mCurrentStatus = PIGSTY; mPigstyMode = new PigstyMode(this); mPigstyMode.setCurrentLevel(level > LevelUtil.PIGSTY_MODE_MAX_LEVEL ? -1 : level); mRootView.addView(mPigstyMode, 0); }); } } /** * 开始经典模式 */ private void startClassicMode(int level) { if (!mLoadingView.isLoading) { mLoadingView.startLoad(() -> { //释放关卡选择view的资源 if (mLevelSelectView != null) { mLevelSelectView.release(); mRootView.removeView(mLevelSelectView); mLevelSelectView = null; } mCurrentStatus = CLASSIC; mClassicMode = new ClassicModeView(this); mClassicMode.setCurrentLevel(level); mRootView.addView(mClassicMode, 0); }); } } /** * 重新开始修猪圈模式 */ public void reloadFixPigstyMode(final int level) { mLoadingView.startLoad(() -> { //释放上一个修猪圈模式的view if (mPigstyMode != null) { mPigstyMode.exitNow(); mRootView.removeView(mPigstyMode); } mPigstyMode = new PigstyMode(MainActivity.this); mPigstyMode.setCurrentLevel(level > LevelUtil.PIGSTY_MODE_MAX_LEVEL ? -1 : level); //添加新的 mRootView.addView(mPigstyMode, 0); }); } /** * 返回主页 */ public void backToHome() { switch (mCurrentStatus) { case LEVEL_SELECT: if (!mLoadingView.isLoading) { mLoadingView.startLoad(() -> { if (mLevelSelectView != null) { mLevelSelectView.release(); mRootView.removeView(mLevelSelectView); mLevelSelectView = null; } resetHomeState(); }); } break; case PIGSTY: mPigstyMode.exit(() -> mLoadingView.startLoad(() -> { mRootView.removeView(mPigstyMode); resetHomeState(); })); break; case CLASSIC: mClassicMode.exit(() -> mLoadingView.startLoad(() -> { mRootView.removeView(mClassicMode); resetHomeState(); })); break; default: break; } } private void resetHomeState() { mCurrentStatus = HOME; mHomeView.setVisibility(View.VISIBLE); mHomeView.startShow(); } private void showExitDialog() { if (mExitDialog == null) { initExitDialog(); } if (!mExitDialog.isShowing()) { mExitDialog.show(); } } private void initExitDialog() { mExitDialog = new AlertDialog.Builder(this).setMessage(R.string.exit_dialog_message) .setNegativeButton(R.string.no, null).setPositiveButton(R.string.yes, (dialog, which) -> finish()).create(); } @Override protected void onRestart() { super.onRestart(); //恢复surfaceview的绘制 if (mCurrentStatus == PIGSTY && mPigstyMode.isStopped()) { mPigstyMode.restart(); } //恢复播放背景音乐 if (mPlayer != null && !mPlayer.isPlaying() && !mHomeView.isMute) { mPlayer.start(); } } @Override protected void onStop() { super.onStop(); //暂停背景音乐 if (mPlayer != null && mPlayer.isPlaying()) { mPlayer.pause(); } //停止surfaceview的绘制 if (mCurrentStatus == PIGSTY && !mPigstyMode.isStopped()) { mPigstyMode.stop(); } //停止播放小猪跑过的动画 if (mCurrentStatus == HOME) { mHomeView.stopShow(); } } @Override public void onBackPressed() { switch (mCurrentStatus) { case HOME: showExitDialog(); break; case LEVEL_SELECT: case PIGSTY: case CLASSIC: backToHome(); break; default: break; } } @Override public void finish() { super.finish(); //释放全部资源 ThreadPool.shutdown(); if (mPlayer != null) { if (mPlayer.isPlaying()) { mPlayer.stop(); } mPlayer.release(); mPlayer = null; } mRootView = null; mExitDialog = null; mLoadingView = null; mPigstyMode = null; mClassicMode = null; mHomeView.release(); mHomeView = null; android.os.Process.killProcess(android.os.Process.myPid()); } }