diff --git a/app/build.gradle b/app/build.gradle index 8a01565..6d49e79 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,8 +1,11 @@ apply plugin: 'com.android.application' android { + compileSdkVersion 26 + defaultConfig { + applicationId "com.example.ninefourone.nutritionmaster" minSdkVersion 19 targetSdkVersion 26 @@ -10,19 +13,38 @@ android { versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } + buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' - implementation 'com.android.support.constraint:constraint-layout:1.1.2' + implementation 'com.android.support:design:26.1.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + //butterknife + implementation 'com.jakewharton:butterknife:8.8.1' + annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' + //logger + implementation 'com.orhanobut:logger:2.2.0' + //超帅侧拉ui + implementation 'com.mxn.soul:flowingdrawer-core:2.0.0' + implementation 'com.nineoldandroids:library:2.4.0' + //图片形状库 + compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar' + //cardview + compile 'com.android.support:cardview-v7:26.1.0' + //tablayout + compile 'com.flyco.tablayout:FlycoTabLayout_Lib:2.0.0@aar' + //viewpager transforms + compile 'com.ToxicBakery.viewpager.transforms:view-pager-transforms:1.2.32@aar' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f192454..978e5b9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,14 +2,31 @@ + + + + + + + + + + + + + + + + - + diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/MainActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/MainActivity.java deleted file mode 100644 index fe05760..0000000 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/MainActivity.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.ninefourone.nutritionmaster; - -import android.support.v7.app.AppCompatActivity; -import android.os.Bundle; - -public class MainActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - } -} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java new file mode 100644 index 0000000..ec33f70 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java @@ -0,0 +1,34 @@ +package com.example.ninefourone.nutritionmaster; + +import android.app.Application; + +import com.orhanobut.logger.AndroidLogAdapter; +import com.orhanobut.logger.Logger; + + +/** + * Created by ScorpioMiku on 2018/8/26. + */ + +public class NutritionMaster extends Application { + public static NutritionMaster mInstance; + + @Override + public void onCreate() { + super.onCreate(); + mInstance = this; + init(); + } + + /** + * 初始化所有基础的东西 + */ + private void init() { + Logger.addLogAdapter(new AndroidLogAdapter()); + Logger.d("Logger初始化成功"); + } + + public static NutritionMaster getInstance() { + return mInstance; + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HomePagerAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HomePagerAdapter.java new file mode 100644 index 0000000..770fd09 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HomePagerAdapter.java @@ -0,0 +1,57 @@ +package com.example.ninefourone.nutritionmaster.adapter; + +import android.content.Context; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; + +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.page1.Page1; +import com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.page2.BodyInformationFragment; +import com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.page3.Page3; + + +/** + * Created by Wangtianrui on 2018/5/1. + */ + +public class HomePagerAdapter extends FragmentPagerAdapter { + private final String[] TITLES; + private Fragment[] fragments; + + public HomePagerAdapter(FragmentManager fm, Context context) { + super(fm); + TITLES = context.getResources().getStringArray(R.array.sections); + fragments = new Fragment[TITLES.length]; + } + + @Override + public Fragment getItem(int position) { + if (fragments[position] == null) { + switch (position) { + case 0: + fragments[position] = Page1.getInstance(); + break; + case 1: + fragments[position] = BodyInformationFragment.getInstance(); + break; + case 2: + fragments[position] = Page3.getInstance(); + break; + default: + break; + } + } + return fragments[position]; + } + + @Override + public int getCount() { + return TITLES.length; + } + + @Override + public CharSequence getPageTitle(int position) { + return TITLES[position]; + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseActivity.java new file mode 100644 index 0000000..d9f9592 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseActivity.java @@ -0,0 +1,86 @@ +package com.example.ninefourone.nutritionmaster.base; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; + +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * Created by ScorpioMiku on 2018/8/26. + */ + +public abstract class BaseActivity extends AppCompatActivity { + private Unbinder unbinder; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getLayoutId()); + unbinder = ButterKnife.bind(this); + initViews(savedInstanceState); + initToolBar(); + } + + /** + * 设置布局layout + * + * @return + */ + public abstract int getLayoutId(); + + /** + * 初始化views + * + * @param savedInstanceState + */ + public abstract void initViews(Bundle savedInstanceState); + + /** + * 初始化toolbar + */ + public abstract void initToolBar(); + + /** + * 加载数据 + */ + public void loadData() { + } + + /** + * 显示进度条 + */ + public void showProgressBar() { + } + + /** + * 隐藏进度条 + */ + public void hideProgressBar() { + } + + /** + * 初始化recyclerView + */ + public void initRecyclerView() { + } + + /** + * 初始化refreshLayout + */ + public void initRefreshLayout() { + } + + /** + * 设置数据显示 + */ + public void finishTask() { + } + + @Override + protected void onDestroy() { + super.onDestroy(); + unbinder.unbind(); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseFragment.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseFragment.java new file mode 100644 index 0000000..6631ea7 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/base/BaseFragment.java @@ -0,0 +1,154 @@ +package com.example.ninefourone.nutritionmaster.base; + +import android.content.Context; +import android.os.Bundle; +import android.support.annotation.LayoutRes; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * Created by ScorpioMiku on 2018/8/26. + */ + +public abstract class BaseFragment extends Fragment { + private View parentView; + private FragmentActivity activity; + protected boolean isPrepared; + protected boolean isVisible; + private Unbinder unbinder; + + public abstract + @LayoutRes + int getLayoutResId(); + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) { + parentView = inflater.inflate(getLayoutResId(), container, false); + activity = getSupportActivity(); + return parentView; + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + unbinder = ButterKnife.bind(this, view); + initView(savedInstanceState); + } + + + /** + * 初始化自己的ui + * + * @param state + */ + public abstract void initView(Bundle state); + + + + @Override + public void onResume() { + super.onResume(); + } + + + @Override + public void onDestroyView() { + super.onDestroyView(); + unbinder.unbind(); + } + + + public FragmentActivity getSupportActivity() { + return super.getActivity(); + } + + + public android.app.ActionBar getSupportActionBar() { + return getSupportActivity().getActionBar(); + } + + + public Context getApplicationContext() { + return this.activity == null ? (getActivity() == null ? + null : getActivity().getApplicationContext()) : this.activity.getApplicationContext(); + } + + + /** + * Fragment数据的懒加载 + */ + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if (getUserVisibleHint()) { + isVisible = true; + onVisible(); + } else { + isVisible = false; + onInvisible(); + } + } + + /** + * fragment显示时才加载数据 + */ + protected void onVisible() { + lazyLoad(); + } + + /** + * fragment懒加载方法 + */ + protected void lazyLoad() { + } + + /** + * fragment隐藏 + */ + protected void onInvisible() { + } + + /** + * 加载数据 + */ + protected void loadData() { + } + + /** + * 显示进度条 + */ + protected void showProgressBar() { + } + + /** + * 隐藏进度条 + */ + protected void hideProgressBar() { + } + + /** + * 初始化recyclerView + */ + protected void initRecyclerView() { + } + + /** + * 初始化refreshLayout + */ + protected void initRefreshLayout() { + } + + /** + * 设置数据显示 + */ + protected void finishTask() { + } + + +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java new file mode 100644 index 0000000..8c08218 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java @@ -0,0 +1,105 @@ +package com.example.ninefourone.nutritionmaster.modules; + +import android.os.Bundle; +import android.widget.LinearLayout; + + +import com.ToxicBakery.viewpager.transforms.AccordionTransformer; +import com.ToxicBakery.viewpager.transforms.CubeInTransformer; +import com.ToxicBakery.viewpager.transforms.CubeOutTransformer; +import com.ToxicBakery.viewpager.transforms.DepthPageTransformer; +import com.ToxicBakery.viewpager.transforms.FlipHorizontalTransformer; +import com.ToxicBakery.viewpager.transforms.FlipVerticalTransformer; +import com.ToxicBakery.viewpager.transforms.RotateUpTransformer; +import com.ToxicBakery.viewpager.transforms.StackTransformer; +import com.ToxicBakery.viewpager.transforms.TabletTransformer; +import com.ToxicBakery.viewpager.transforms.ZoomInTransformer; +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.adapter.HomePagerAdapter; +import com.example.ninefourone.nutritionmaster.base.BaseActivity; +import com.example.ninefourone.nutritionmaster.ui.NoScrollViewPager; +import com.flyco.tablayout.SlidingTabLayout; +import com.mxn.soul.flowingdrawer_core.ElasticDrawer; +import com.mxn.soul.flowingdrawer_core.FlowingDrawer; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; + +public class MainActivity extends BaseActivity { + + @BindView(R.id.drawerlayout) + FlowingDrawer mDrawer; + @BindView(R.id.navigation_layout) + LinearLayout navigationLayout; + @BindView(R.id.view_pager) + NoScrollViewPager viewPager; + @BindView(R.id.sliding_tab_layout) + SlidingTabLayout slidingTabLayout; + + + @Override + public int getLayoutId() { + return R.layout.activity_main; + } + + @Override + public void initViews(Bundle savedInstanceState) { + mDrawer.setTouchMode(ElasticDrawer.TOUCH_MODE_BEZEL); + mDrawer.setOnDrawerStateChangeListener(new ElasticDrawer.OnDrawerStateChangeListener() { + @Override + public void onDrawerStateChange(int oldState, int newState) { + if (newState == ElasticDrawer.STATE_CLOSED) { +// Logger.i("Drawer STATE_CLOSED"); + } + } + + @Override + public void onDrawerSlide(float openRatio, int offsetPixels) { +// Logger.i("openRatio=" + openRatio + " ,offsetPixels=" + offsetPixels); + } + }); + initViewPager(); + } + + /** + * 初始化ViewPager + */ + private void initViewPager() { + HomePagerAdapter homePagerAdapter = new HomePagerAdapter(getSupportFragmentManager(), this); + viewPager.setOffscreenPageLimit(3); + viewPager.setAdapter(homePagerAdapter); + //CubeInTransformer 内旋 + //FlipHorizontalTransformer 像翻书一样 + //AccordionTransformer 风琴 拉压 + viewPager.setPageTransformer(true, new CubeOutTransformer()); + slidingTabLayout.setViewPager(viewPager); + viewPager.setCurrentItem(1); + + } + + @Override + public void initToolBar() { + + } + + @Override + public void onPointerCaptureChanged(boolean hasCapture) { + + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // TODO: add setContentView(...) invocation + ButterKnife.bind(this); + } + + /** + * 点击事件 + */ + @OnClick(R.id.navigation_layout) + public void onViewClicked() { + mDrawer.openMenu(); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/page1/Page1.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/page1/Page1.java new file mode 100644 index 0000000..24a795d --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/page1/Page1.java @@ -0,0 +1,27 @@ +package com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.page1; + +import android.os.Bundle; + +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.base.BaseFragment; + +/** + * Created by ScorpioMiku on 2018/8/26. + */ + +public class Page1 extends BaseFragment { + @Override + public int getLayoutResId() { + return R.layout.page_1; + } + + @Override + public void initView(Bundle state) { + + } + + + public static BaseFragment getInstance() { + return new Page1(); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/page2/BodyInformationFragment.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/page2/BodyInformationFragment.java new file mode 100644 index 0000000..3083ba5 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/page2/BodyInformationFragment.java @@ -0,0 +1,27 @@ +package com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.page2; + +import android.os.Bundle; + +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.base.BaseFragment; + +/** + * Created by ScorpioMiku on 2018/8/26. + */ + +public class BodyInformationFragment extends BaseFragment { + @Override + public int getLayoutResId() { + return R.layout.page_2; + } + + @Override + public void initView(Bundle state) { + + } + + + public static BaseFragment getInstance() { + return new BodyInformationFragment(); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/page3/Page3.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/page3/Page3.java new file mode 100644 index 0000000..fd1d881 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/page3/Page3.java @@ -0,0 +1,27 @@ +package com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.page3; + +import android.os.Bundle; + +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.base.BaseFragment; + +/** + * Created by ScorpioMiku on 2018/8/26. + */ + +public class Page3 extends BaseFragment { + @Override + public int getLayoutResId() { + return R.layout.page_3; + } + + @Override + public void initView(Bundle state) { + + } + + + public static BaseFragment getInstance() { + return new Page3(); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/ui/NoScrollViewPager.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/ui/NoScrollViewPager.java new file mode 100644 index 0000000..8b83745 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/ui/NoScrollViewPager.java @@ -0,0 +1,34 @@ +package com.example.ninefourone.nutritionmaster.ui; + +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; + +/** + * Created by Wangtianrui on 2018/5/1. + * 重写Viewpager解决点击tab去除滑动动画效果的问题 + */ +public class NoScrollViewPager extends ViewPager { + public NoScrollViewPager(Context context) { + super(context); + } + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public void scrollTo(int x, int y) { + super.scrollTo(x, y); + } + + @Override + public void setCurrentItem(int item, boolean smoothScroll) { + super.setCurrentItem(item, smoothScroll); + } + + @Override + public void setCurrentItem(int item) { + super.setCurrentItem(item, false); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java new file mode 100644 index 0000000..9b4ef5d --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java @@ -0,0 +1,8 @@ +package com.example.ninefourone.nutritionmaster.utils; + +/** + * Created by ScorpioMiku on 2018/8/26. + */ + +public class ConstantUtils { +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MessageUtils.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MessageUtils.java new file mode 100644 index 0000000..1da17e5 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MessageUtils.java @@ -0,0 +1,16 @@ +package com.example.ninefourone.nutritionmaster.utils; + +import android.widget.Toast; + +import com.example.ninefourone.nutritionmaster.NutritionMaster; + +/** + * Created by ScorpioMiku on 2018/8/26. + */ + +public class MessageUtils { + + public static void MakeToast(String message) { + Toast.makeText(NutritionMaster.getInstance(), message, Toast.LENGTH_SHORT).show(); + } +} diff --git a/app/src/main/res/drawable-v24/ic_drawer_home.png b/app/src/main/res/drawable-v24/ic_drawer_home.png new file mode 100644 index 0000000..53f2c9b Binary files /dev/null and b/app/src/main/res/drawable-v24/ic_drawer_home.png differ diff --git a/app/src/main/res/drawable/test_avatar.jpg b/app/src/main/res/drawable/test_avatar.jpg new file mode 100644 index 0000000..e9a5988 Binary files /dev/null and b/app/src/main/res/drawable/test_avatar.jpg differ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 82859bf..53d685e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,118 @@ - + android:clipChildren="false" + android:clipToPadding="false" + app:edMenuBackground="@color/colorPrimary" + app:edMenuSize="230dp" + app:edPosition="1"> - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +