package com.example.jingbin.cloudreader; import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.NavigationView; import android.support.v4.app.Fragment; import android.support.v4.view.GravityCompat; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import com.example.jingbin.cloudreader.app.ConstantsImageUrl; import com.example.jingbin.cloudreader.databinding.ActivityMainBinding; import com.example.jingbin.cloudreader.databinding.NavHeaderMainBinding; import com.example.jingbin.cloudreader.http.rx.RxBus; import com.example.jingbin.cloudreader.http.rx.RxBusBaseMessage; import com.example.jingbin.cloudreader.http.rx.RxCodeConstants; import com.example.jingbin.cloudreader.ui.book.BookFragment; import com.example.jingbin.cloudreader.ui.gank.GankFragment; import com.example.jingbin.cloudreader.ui.menu.NavAboutActivity; import com.example.jingbin.cloudreader.ui.menu.NavDeedBackActivity; import com.example.jingbin.cloudreader.ui.menu.NavDownloadActivity; import com.example.jingbin.cloudreader.ui.menu.NavHomePageActivity; import com.example.jingbin.cloudreader.ui.one.OneFragment; import com.example.jingbin.cloudreader.utils.CommonUtils; import com.example.jingbin.cloudreader.utils.ImgLoadUtil; import com.example.jingbin.cloudreader.utils.PerfectClickListener; import com.example.jingbin.cloudreader.utils.SPUtils; import com.example.jingbin.cloudreader.view.MyFragmentPagerAdapter; import com.example.jingbin.cloudreader.view.statusbar.StatusBarUtil; import com.example.jingbin.cloudreader.view.webview.WebViewActivity; import java.util.ArrayList; import rx.functions.Action1; /** * Created by jingbin on 16/11/21. * Link to:https://github.com/youlookwhat/CloudReader * Contact me:http://www.jianshu.com/u/e43c6e979831 */ public class MainActivity extends AppCompatActivity implements View.OnClickListener, ViewPager.OnPageChangeListener { private FrameLayout llTitleMenu; private Toolbar toolbar; private FloatingActionButton fab; private NavigationView navView; private DrawerLayout drawerLayout; private ViewPager vpContent; // 一定需要对应的bean private ActivityMainBinding mBinding; private ImageView llTitleGank; private ImageView llTitleOne; private ImageView llTitleDou; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); initStatusView(); initId(); initRxBus(); StatusBarUtil.setColorNoTranslucentForDrawerLayout(MainActivity.this, drawerLayout, CommonUtils.getColor(R.color.colorTheme)); initContentFragment(); initDrawerLayout(); initListener(); } private void initStatusView() { ViewGroup.LayoutParams layoutParams = mBinding.include.viewStatus.getLayoutParams(); layoutParams.height = StatusBarUtil.getStatusBarHeight(this); mBinding.include.viewStatus.setLayoutParams(layoutParams); } private void initId() { drawerLayout = mBinding.drawerLayout; navView = mBinding.navView; fab = mBinding.include.fab; toolbar = mBinding.include.toolbar; llTitleMenu = mBinding.include.llTitleMenu; vpContent = mBinding.include.vpContent; fab.setVisibility(View.GONE); llTitleGank = mBinding.include.ivTitleGank; llTitleOne = mBinding.include.ivTitleOne; llTitleDou = mBinding.include.ivTitleDou; } private void initListener() { llTitleMenu.setOnClickListener(this); mBinding.include.ivTitleGank.setOnClickListener(this); mBinding.include.ivTitleDou.setOnClickListener(this); mBinding.include.ivTitleOne.setOnClickListener(this); fab.setOnClickListener(this); } NavHeaderMainBinding bind; /** * inflateHeaderView 进来的布局要宽一些 */ private void initDrawerLayout() { navView.inflateHeaderView(R.layout.nav_header_main); View headerView = navView.getHeaderView(0); bind = DataBindingUtil.bind(headerView); bind.setListener(this); bind.dayNightSwitch.setChecked(SPUtils.getNightMode()); ImgLoadUtil.displayCircle(bind.ivAvatar, ConstantsImageUrl.IC_AVATAR); bind.llNavExit.setOnClickListener(this); bind.ivAvatar.setOnClickListener(this); bind.llNavHomepage.setOnClickListener(listener); bind.llNavScanDownload.setOnClickListener(listener); bind.llNavDeedback.setOnClickListener(listener); bind.llNavAbout.setOnClickListener(listener); bind.llNavLogin.setOnClickListener(listener); } private void initContentFragment() { ArrayList<Fragment> mFragmentList = new ArrayList<>(); mFragmentList.add(new GankFragment()); mFragmentList.add(new OneFragment()); mFragmentList.add(new BookFragment()); // 注意使用的是:getSupportFragmentManager MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), mFragmentList); vpContent.setAdapter(adapter); // 设置ViewPager最大缓存的页面个数(cpu消耗少) vpContent.setOffscreenPageLimit(2); vpContent.addOnPageChangeListener(this); mBinding.include.ivTitleGank.setSelected(true); vpContent.setCurrentItem(0); setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { //去除默认Title显示 actionBar.setDisplayShowTitleEnabled(false); } } private PerfectClickListener listener = new PerfectClickListener() { @Override protected void onNoDoubleClick(final View v) { mBinding.drawerLayout.closeDrawer(GravityCompat.START); mBinding.drawerLayout.postDelayed(new Runnable() { @Override public void run() { switch (v.getId()) { case R.id.ll_nav_homepage:// 主页 NavHomePageActivity.startHome(MainActivity.this); break; case R.id.ll_nav_scan_download://扫码下载 NavDownloadActivity.start(MainActivity.this); break; case R.id.ll_nav_deedback:// 问题反馈 NavDeedBackActivity.start(MainActivity.this); break; case R.id.ll_nav_about:// 关于云阅 NavAboutActivity.start(MainActivity.this); break; case R.id.ll_nav_login:// 登录GitHub账号 WebViewActivity.loadUrl(v.getContext(), "https://github.com/login", "登录GitHub账号"); break; } } }, 260); } }; @Override public void onClick(View v) { switch (v.getId()) { case R.id.ll_title_menu:// 开启菜单 drawerLayout.openDrawer(GravityCompat.START); break; case R.id.iv_title_gank:// 干货栏 if (vpContent.getCurrentItem() != 0) {//不然cpu会有损耗 llTitleGank.setSelected(true); llTitleOne.setSelected(false); llTitleDou.setSelected(false); vpContent.setCurrentItem(0); } break; case R.id.iv_title_one:// 电影栏 if (vpContent.getCurrentItem() != 1) { llTitleOne.setSelected(true); llTitleGank.setSelected(false); llTitleDou.setSelected(false); vpContent.setCurrentItem(1); } break; case R.id.iv_title_dou:// 书籍栏 if (vpContent.getCurrentItem() != 2) { llTitleDou.setSelected(true); llTitleOne.setSelected(false); llTitleGank.setSelected(false); vpContent.setCurrentItem(2); } break; case R.id.iv_avatar: // 头像进入GitHub WebViewActivity.loadUrl(v.getContext(),CommonUtils.getString(R.string.string_url_cloudreader),"CloudReader"); break; case R.id.ll_nav_exit:// 退出应用 finish(); break; default: break; } } /** * 夜间模式待完善 */ public boolean getNightMode() { return SPUtils.getNightMode(); } public void onNightModeClick(View view) { if (!SPUtils.getNightMode()) { // SkinCompatManager.getInstance().loadSkin(Constants.NIGHT_SKIN); } else { // 恢复应用默认皮肤 // SkinCompatManager.getInstance().restoreDefaultTheme(); } SPUtils.setNightMode(!SPUtils.getNightMode()); bind.dayNightSwitch.setChecked(SPUtils.getNightMode()); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_search: // Toast.makeText(this, "搜索", Toast.LENGTH_SHORT).show(); return true; default: return super.onOptionsItemSelected(item); } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position) { case 0: llTitleGank.setSelected(true); llTitleOne.setSelected(false); llTitleDou.setSelected(false); break; case 1: llTitleOne.setSelected(true); llTitleGank.setSelected(false); llTitleDou.setSelected(false); break; case 2: llTitleDou.setSelected(true); llTitleOne.setSelected(false); llTitleGank.setSelected(false); break; } } @Override public void onPageScrollStateChanged(int state) { } @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (mBinding.drawerLayout.isDrawerOpen(GravityCompat.START)) { mBinding.drawerLayout.closeDrawer(GravityCompat.START); } else { // 不退出程序,进入后台 moveTaskToBack(true); } return true; } return super.onKeyDown(keyCode, event); } /** * 每日推荐点击"新电影热映榜"跳转 */ private void initRxBus() { RxBus.getDefault().toObservable(RxCodeConstants.JUMP_TYPE_TO_ONE, RxBusBaseMessage.class) .subscribe(new Action1<RxBusBaseMessage>() { @Override public void call(RxBusBaseMessage integer) { mBinding.include.vpContent.setCurrentItem(1); } }); } }