package pyp.navigation.main; import pyp.navigation.R; import pyp.navigation.association.AssociationFragment; import pyp.navigation.association.bean.Association; import pyp.navigation.association.detail.AssociationDetailFragment; import pyp.navigation.home.HomeFragment; import pyp.navigation.main.menu.LeftMenuFragment; import pyp.navigation.main.menu.RightMenuFragment; import pyp.navigation.map.MapFragment; import pyp.navigation.setting.SettingFragment; import pyp.navigation.update.UpdateManager; import android.graphics.Canvas; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.view.animation.Interpolator; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.Tab; import com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.view.MenuItem.OnMenuItemClickListener; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.CanvasTransformer; import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity; /** * @Title: MainActivity * @Description: 程序入口 * @author qsuron * @date 2014-7-27 * @email admin@qiushurong.cn */ public class MainActivity extends SlidingFragmentActivity implements ActionBar.TabListener{ private static final boolean ACTIONBAR_LOGO = true; private static final boolean ACTIONBAR_SCOLL = true; private static final boolean ACTIONBAR_TITLE = true; private static final boolean ACTIONBAR_HOME_BTN = true; private CanvasTransformer mTransformer; private FragmentManager mFragmentManager = getSupportFragmentManager(); //缓存 - 所有Fragment //TODO - 添加Fragment private final MapFragment mMapFragment = new MapFragment(); private final HomeFragment mHomeFragment = new HomeFragment(); private final SettingFragment mSettingFragment = new SettingFragment(); private final AssociationFragment mAssociationFragment = new AssociationFragment(); private final AssociationDetailFragment mAssociationDetailFragment = new AssociationDetailFragment(); private UpdateManager update; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_content_frame); setTitle("番职e家"); //设置 - 标题栏的标题 //initActionBar(); //初始化 - ActionBar initAnimation(); //初始化 - 滑动动画 initSlidingMenu(savedInstanceState); //初始化 - 滑动菜单 initFragment(); //初始化 - Fragment } /** * 方法 initAnimation * 初始化 - 滑动动画 */ private void initAnimation() { mTransformer = new CanvasTransformer(){ @Override public void transformCanvas(Canvas canvas, float percentOpen) { //动画1 - Zoom //float scale = (float) (percentOpen*0.25 + 0.75); //canvas.scale(scale, scale, canvas.getWidth()/2, canvas.getHeight()/2); //动画3 - silde up canvas.translate(0, canvas.getHeight() * (1 - interp.getInterpolation(percentOpen))); } }; } /** * 方法 initSlidingMenu * 初始化滑动菜单 * @param savedInstanceState */ private void initSlidingMenu(Bundle savedInstanceState) { // 设置滑动菜单的视图 setBehindContentView(R.layout.main_menu_frame); // 实例化滑动菜单对象 SlidingMenu sm = getSlidingMenu(); // 设置滑动阴影的宽度 sm.setShadowWidthRes(R.dimen.shadow_width); // 设置滑动阴影的图像资源 sm.setShadowDrawable(R.drawable.main_shadow); // 设置滑动菜单视图的宽度 //---***--- sm.setBehindOffsetRes(R.dimen.slidingmenu_offset); // 设置渐入渐出效果的值 sm.setFadeDegree(0.35f); // 设置触摸屏幕的模式 sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); // 设置动画 After initAnimation sm.setBehindCanvasTransformer(mTransformer); // 双菜单栏 sm.setMode(SlidingMenu.LEFT_RIGHT); // 左菜单栏 getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame, new LeftMenuFragment()).commit(); // 右菜单栏 sm.setSecondaryMenu(R.layout.main_menu_frame_two); sm.setSecondaryShadowDrawable(R.drawable.main_shadowright); getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame_two, new RightMenuFragment()).commit(); } /** * 字段 Interpolator : interp * 动画3 - silde up */ private static Interpolator interp = new Interpolator() { @Override public float getInterpolation(float t) { t -= 1.0f; return t * t * t + 1.0f; } }; /** * 方法 setTouchMode * 方法描述 * @param mode int * 1 : 全屏 * 2 : 边缘 * 3 : 全禁止 */ public void setTouchMode(int mode){ switch (mode) { case 1: getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); break; case 2: getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); break; case 3: getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE); break; } } /** * 重写 onBackPressed * 实现返回键功能 */ @Override public void onBackPressed() { //如果是在社团详情页面,就返回到社团列表页面 if(mAssociationDetailFragment.isVisible()) { FragmentTransaction ft = mFragmentManager.beginTransaction(); ft.show(mAssociationFragment); ft.hide(mAssociationDetailFragment); ft.commit(); } else { //如果菜单栏打开着 if(getSlidingMenu().isMenuShowing() || getSlidingMenu().isSecondaryMenuShowing()){ //再按一次退出,废弃了 }else{ Log.i("qsuron", "菜单栏关着"); getSlidingMenu().showMenu(); return; } super.onBackPressed(); } } /** * 方法 check4update * 检查新版本 */ public void check4update(){ update = new UpdateManager(this); new Thread(updateRunnable).start(); } /** * 字段 Runnable : updateRunnable * 线程 - 检查新版本 * TODO * TODO * TODO * TODO */ private Runnable updateRunnable = new Runnable() { @Override public void run() { Looper.prepare(); try { update.checkUpdateInfo(); }catch (Exception e) { e.printStackTrace(); } Message msg = new Message(); Bundle data = new Bundle(); data.putString("value","请求结果"); msg.setData(data); handler.sendMessage(msg); Looper.loop(); } }; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bundle data = msg.getData(); String val = data.getString("value"); Log.i("mylog", "请求结果-->" + val); } }; /******************************************************** * 关于Fragment的所有代码,在下方!每次添加Fragment都要修改 ********************************************************/ /** * 方法 initFragment * 初始化FragmentManager,默认显示HomeFragment,隐藏其他 */ private void initFragment(){ FragmentTransaction ft = mFragmentManager.beginTransaction(); //TODO - 添加Fragment ft.add(R.id.content_frame, mMapFragment, MapFragment.class.getName()); ft.add(R.id.content_frame, mHomeFragment, HomeFragment.class.getName()); ft.add(R.id.content_frame, mSettingFragment, SettingFragment.class.getName()); ft.add(R.id.content_frame, mAssociationFragment, AssociationFragment.class.getName()); ft.add(R.id.content_frame, mAssociationDetailFragment, AssociationDetailFragment.class.getName()); ft.hide(mAssociationFragment); ft.hide(mMapFragment); ft.hide(mSettingFragment); ft.hide(mAssociationDetailFragment); ft.commit(); } /** * 方法 changeFragment * 切换到fragment * @param mFragment 要切换到的fragment的包名+类名 * 可以用 .class.getName()获取 */ public void changeFragment(String mFragment){ if(mFragmentManager.findFragmentByTag(mFragment).isVisible()){ Log.i("qsuron", "已经处于要切换的页面,无需切换"); getSlidingMenu().showContent(); return; }else if(mFragmentManager.findFragmentByTag(mFragment)!=null){ FragmentTransaction ft = mFragmentManager.beginTransaction(); //TODO - 添加Fragment ft.hide(mAssociationFragment); ft.hide(mMapFragment); ft.hide(mSettingFragment); ft.hide(mAssociationDetailFragment); ft.hide(mHomeFragment); ft.show(mFragmentManager.findFragmentByTag(mFragment)); ft.commit(); changeTouchMode(mFragment); getSlidingMenu().showContent(); }else{ getSlidingMenu().showContent(); } } /** * 方法 changeTouchMode * 根据下一个fragment的类名包名,来改变菜单触摸触发方式 * @param mFragment 下一个fragment的类名.包名 */ private void changeTouchMode(String mFragment) { if(mFragment.equals(AssociationFragment.class.getName())){ setTouchMode(2); return; } if(mFragment.equals(MapFragment.class.getName())){ setTouchMode(2); return; } setTouchMode(1); } /** * 方法 showAssociationDetail * 隐藏社团列表页面 - 传入社团信息 - 打开社团详情页面 * @param mAssociation 社团信息封装类 */ public void showAssociationDetail(Association mAssociation) { FragmentTransaction ft = mFragmentManager.beginTransaction(); ft.hide(mAssociationFragment); ft.show(mAssociationDetailFragment); ft.commit(); mAssociationDetailFragment.setAssociation(mAssociation); } /** * 方法 hideAssociationDetail * 隐藏社团详情页面 - 回到社团列表页面 */ public void hideAssociationDetail() { FragmentTransaction ft = mFragmentManager.beginTransaction(); ft.hide(mAssociationDetailFragment); ft.show(mAssociationFragment); ft.commit(); } /***************************************************** * ActionBar 相关 *****************************************************/ /** * 方法 initActionBar * 初始化 - ActionBar */ private void initActionBar() { //设置 - ActionBar是否跟着滑动 setSlidingActionBarEnabled(ACTIONBAR_SCOLL); //设置 - 是否显示ActionBar上的查看菜单按钮(<) getSupportActionBar().setDisplayHomeAsUpEnabled(ACTIONBAR_HOME_BTN); //设置 - 是否显示ActionBar上的LOGO getSupportActionBar().setDisplayUseLogoEnabled(ACTIONBAR_LOGO); //设置 - 是否显示ActionBar上的标题 getSupportActionBar().setDisplayShowTitleEnabled(ACTIONBAR_TITLE); //设置 - 是否显示ActionBar背景 //getSupportActionBar().setBackgroundDrawable(this.getResources().getDrawable(R.color.main_actionbar_bgcolor)); } /** * 重写 onOptionsItemSelected * 菜单按钮点击事件,通过点击ActionBar的Home图标按钮来打开滑动菜单 */ @Override public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) { switch (item.getItemId()) { case android.R.id.home: toggle(); return false; default: return super.onOptionsItemSelected(item); } } public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } /***************************************************** * 下面是一些 暂时没用到,可能会有用的代码段 *****************************************************/ //隐藏键盘 //InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); //imm.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0); }