diff --git a/app/build.gradle b/app/build.gradle index 9e6509c6..4de281f1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -53,4 +53,6 @@ dependencies { implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0' debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-2' implementation project(path: ':ideahttp') + api 'com.jakewharton:butterknife:10.2.0' + annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 93aa3d37..b23354d5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,17 +12,9 @@ android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> - - - - - - + android:name=".activity.WelcomeActivity" + android:theme="@style/FullScreenTheme" > @@ -30,6 +22,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/zhpan/circleviewpager/activity/MainActivity.java b/app/src/main/java/com/example/zhpan/circleviewpager/activity/MainActivity.java index 152fb310..386d09eb 100644 --- a/app/src/main/java/com/example/zhpan/circleviewpager/activity/MainActivity.java +++ b/app/src/main/java/com/example/zhpan/circleviewpager/activity/MainActivity.java @@ -1,43 +1,91 @@ package com.example.zhpan.circleviewpager.activity; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; +import androidx.viewpager.widget.ViewPager; -import android.view.View; +import android.widget.RadioGroup; import com.example.zhpan.circleviewpager.R; +import com.example.zhpan.circleviewpager.adapter.AdapterFragmentPager; + +import butterknife.BindView; +import butterknife.ButterKnife; public class MainActivity extends AppCompatActivity { + @BindView(R.id.rg_tab) + RadioGroup rgTab; + @BindView(R.id.vp_fragment) + ViewPager mViewPager; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + ButterKnife.bind(this); + initData(); + setListener(); } - public void onClick(View view) { - Intent intent; - switch (view.getId()) { - case R.id.tv_page_style: - intent = new Intent(this, PageStyleActivity.class); - break; - case R.id.btn_view_pager3: - intent = new Intent(this, PhotoViewActivity.class); - break; - case R.id.btn_view_pager5: - intent = new Intent(this, PageTransformerActivity.class); + private void initData() { + AdapterFragmentPager mAdapter = new AdapterFragmentPager(getSupportFragmentManager()); + mViewPager.setAdapter(mAdapter); + mViewPager.setOffscreenPageLimit(2); + mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + rgTab.check(getCheckedId(position)); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + } + + private int getCheckedId(int position) { + int checkedId = R.id.rb_home; + switch (position) { + case 0: + checkedId = R.id.rb_home; break; - case R.id.btn_indicator_style: - intent = new Intent(this, IndicatorStyleActivity.class); + case 1: + checkedId = R.id.rb_find; break; - case R.id.btn_view_pager4: - default: - intent = new Intent(this, NetworkBannerActivity.class); + case 2: + checkedId = R.id.rb_add; break; } - startActivity(intent); + return checkedId; + } + + private void setListener() { + rgTab.setOnCheckedChangeListener((group, checkedId) -> { + if (checkedId == R.id.rb_home) { + mViewPager.setCurrentItem(AdapterFragmentPager.PAGE_HOME, false); + + } else if (checkedId == R.id.rb_find) { + mViewPager.setCurrentItem(AdapterFragmentPager.PAGE_FIND, false); + + } else if (checkedId == R.id.rb_add) { + mViewPager.setCurrentItem(AdapterFragmentPager.PAGE_OTHERS, false); + } + }); + } + + public static void start(Context context) { + context.startActivity(new Intent(context, MainActivity.class)); } + } diff --git a/app/src/main/java/com/example/zhpan/circleviewpager/activity/PageTransformerActivity.java b/app/src/main/java/com/example/zhpan/circleviewpager/activity/PageTransformerActivity.java deleted file mode 100644 index 32574ee3..00000000 --- a/app/src/main/java/com/example/zhpan/circleviewpager/activity/PageTransformerActivity.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.example.zhpan.circleviewpager.activity; - -import androidx.appcompat.app.AppCompatActivity; - -import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.Toast; - -import com.example.zhpan.circleviewpager.R; -import com.example.zhpan.circleviewpager.viewholder.TransformerViewHolder; -import com.zhpan.bannerview.BannerViewPager; -import com.zhpan.bannerview.constants.TransformerStyle; -import com.zhpan.bannerview.transform.StackTransformer; - -import java.util.ArrayList; - -public class PageTransformerActivity extends AppCompatActivity { - - private static final String TAG = "PageTransformerActivity"; - private BannerViewPager mViewpager; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_page_transformer); - setTitle(R.string.title_transformer); - initViewPager(); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.transformer_menu, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.menu0: - mViewpager.setPageTransformerStyle(TransformerStyle.STACK); - break; - case R.id.menu1: - mViewpager.setPageTransformerStyle(TransformerStyle.ROTATE); - break; - case R.id.menu2: - mViewpager.setPageTransformerStyle(TransformerStyle.DEPTH); - break; - case R.id.menu3: - mViewpager.setPageTransformerStyle(TransformerStyle.ACCORDION); - break; - } - return super.onOptionsItemSelected(item); - } - - private void initViewPager() { - mViewpager = findViewById(R.id.viewpager); - mViewpager.setIndicatorVisibility(View.GONE) - .setCanLoop(false) - .setAutoPlay(false) - .setScrollDuration(1000) - .setHolderCreator(TransformerViewHolder::new) - .setOnPageClickListener(position -> Toast.makeText(PageTransformerActivity.this, - "this is item:" + mViewpager.getCurrentItem(), Toast.LENGTH_SHORT).show()) - .create(getData()); - mViewpager.setPageTransformer(new StackTransformer()); - } - - private ArrayList getData() { - ArrayList list = new ArrayList<>(); - for (int i = 0; i <= 2; i++) { - int drawable = getResources().getIdentifier("guide" + i, "drawable", getPackageName()); - list.add(drawable); - } - return list; - } -} diff --git a/app/src/main/java/com/example/zhpan/circleviewpager/activity/CustomerBannerPageActivity.java b/app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.java similarity index 57% rename from app/src/main/java/com/example/zhpan/circleviewpager/activity/CustomerBannerPageActivity.java rename to app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.java index 3a85c3f1..553690b4 100644 --- a/app/src/main/java/com/example/zhpan/circleviewpager/activity/CustomerBannerPageActivity.java +++ b/app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.java @@ -3,27 +3,34 @@ import androidx.appcompat.app.AppCompatActivity; +import android.content.Intent; import android.os.Bundle; import android.view.View; -import android.widget.Toast; import com.example.zhpan.circleviewpager.R; import com.example.zhpan.circleviewpager.bean.CustomBean; import com.example.zhpan.circleviewpager.viewholder.CustomPageViewHolder; import com.zhpan.bannerview.BannerViewPager; +import com.zhpan.bannerview.constants.IndicatorSlideMode; +import com.zhpan.bannerview.constants.TransformerStyle; +import com.zhpan.bannerview.indicator.CircleIndicatorView; +import com.zhpan.bannerview.indicator.IIndicator; import java.util.ArrayList; import java.util.List; +import java.util.Random; + +public class WelcomeActivity extends AppCompatActivity { -public class CustomerBannerPageActivity extends AppCompatActivity { private BannerViewPager mViewPager; private int[] imgRes = {R.drawable.guide0, R.drawable.guide1, R.drawable.guide2}; private String[] des = {"在这里\n你可以听到周围人的心声", "在这里\nTA会在下一秒遇见你", "在这里\n不再错过可以改变你一生的人"}; + private int[] transforms = {TransformerStyle.NONE, TransformerStyle.ACCORDION, TransformerStyle.STACK, TransformerStyle.DEPTH, TransformerStyle.ROTATE}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_customer_banner); + setContentView(R.layout.activity_welcome); getData(); setupViewPager(); } @@ -38,17 +45,29 @@ private void setupViewPager() { mViewPager = findViewById(R.id.viewpager); mViewPager.setAutoPlay(false) .setCanLoop(false) + .setPageTransformerStyle(transforms[new Random().nextInt(4)]) .setIndicatorVisibility(View.GONE) - .setOnPageClickListener(position -> Toast.makeText(CustomerBannerPageActivity.this, - "点击页面" + mViewPager.getCurrentItem(), Toast.LENGTH_SHORT).show()) + .setIndicatorView(getIndicatorView()) .setHolderCreator(() -> { CustomPageViewHolder customPageViewHolder = new CustomPageViewHolder(); - customPageViewHolder.setOnSubViewClickListener((view, position) -> Toast.makeText(CustomerBannerPageActivity.this, - "立即体验" + position, Toast.LENGTH_SHORT).show()); + customPageViewHolder.setOnSubViewClickListener((view, position) -> { + MainActivity.start(WelcomeActivity.this); + finish(); + }); return customPageViewHolder; }).create(getData()); } + private IIndicator getIndicatorView() { + CircleIndicatorView indicatorView = findViewById(R.id.indicator); + indicatorView.setNormalColor(getResources().getColor(R.color.white)); + indicatorView.setCheckedColor(getResources().getColor(R.color.white_alpha_75)); + indicatorView.setIndicatorWidth((int) getResources().getDimension(R.dimen.dp_6), + (int) getResources().getDimension(R.dimen.dp_9)); + indicatorView.setIndicatorGap((int) getResources().getDimension(R.dimen.dp_10)); + return indicatorView; + } + private List getData() { List list = new ArrayList<>(); for (int i = 0; i < imgRes.length; i++) { diff --git a/app/src/main/java/com/example/zhpan/circleviewpager/adapter/AdapterFragmentPager.java b/app/src/main/java/com/example/zhpan/circleviewpager/adapter/AdapterFragmentPager.java new file mode 100644 index 00000000..30644ad5 --- /dev/null +++ b/app/src/main/java/com/example/zhpan/circleviewpager/adapter/AdapterFragmentPager.java @@ -0,0 +1,64 @@ +package com.example.zhpan.circleviewpager.adapter; + +import android.util.SparseArray; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + + +import com.example.zhpan.circleviewpager.fragment.BaseFragment; +import com.example.zhpan.circleviewpager.fragment.FindFragment; +import com.example.zhpan.circleviewpager.fragment.HomeFragment; +import com.example.zhpan.circleviewpager.fragment.OthersFragment; + +import java.util.List; + +public class AdapterFragmentPager extends FragmentPagerAdapter { + + public static final int PAGE_HOME = 0; + + public static final int PAGE_FIND = 1; + + public static final int PAGE_OTHERS = 2; + + private SparseArray fragmentList; + + public AdapterFragmentPager(FragmentManager fm) { + super(fm); + fragmentList = getFragments(); + } + + private SparseArray getFragments() { + SparseArray fragmentList = new SparseArray<>(); + fragmentList.put(PAGE_HOME, HomeFragment.getInstance()); + fragmentList.put(PAGE_FIND, FindFragment.getInstance()); + fragmentList.put(PAGE_OTHERS, OthersFragment.getInstance()); + return fragmentList; + } + + @NonNull + @Override + public Object instantiateItem(@NonNull ViewGroup container, int position) { + Fragment fragment = (Fragment) super.instantiateItem(container, position); + fragmentList.put(position, (BaseFragment) fragment); + return fragment; + } + + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + if (fragmentList != null) { + return fragmentList.size(); + } else { + return 0; + } + } + +} diff --git a/app/src/main/java/com/example/zhpan/circleviewpager/fragment/BaseFragment.java b/app/src/main/java/com/example/zhpan/circleviewpager/fragment/BaseFragment.java new file mode 100644 index 00000000..79a276a4 --- /dev/null +++ b/app/src/main/java/com/example/zhpan/circleviewpager/fragment/BaseFragment.java @@ -0,0 +1,83 @@ +package com.example.zhpan.circleviewpager.fragment; + +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.trello.rxlifecycle2.components.support.RxFragment; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * MVC模式的Base fragment + */ +public abstract class BaseFragment extends RxFragment { + protected List mDrawableList = new ArrayList<>(); + protected Context mContext; + private Unbinder mBind; + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); + this.mContext = context.getApplicationContext(); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(getLayout(), container, false); + mBind = ButterKnife.bind(this,view); + initData(); + initTitle(); + initView(savedInstanceState, view); + return view; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (mBind != null) { + mBind.unbind(); + } + } + + private void initData() { + for (int i = 0; i <= 3; i++) { + int drawable = getResources().getIdentifier("t" + i, "drawable", mContext.getPackageName()); + mDrawableList.add(drawable); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + } + + + /** + * 获取当前Activity的UI布局 + * + * @return 布局id + */ + protected abstract int getLayout(); + + /** + * 初始化标题 + */ + protected abstract void initTitle(); + + /** + * 初始化数据 + */ + protected abstract void initView(Bundle savedInstanceState, View view); + +} diff --git a/app/src/main/java/com/example/zhpan/circleviewpager/activity/PageStyleActivity.java b/app/src/main/java/com/example/zhpan/circleviewpager/fragment/FindFragment.java similarity index 62% rename from app/src/main/java/com/example/zhpan/circleviewpager/activity/PageStyleActivity.java rename to app/src/main/java/com/example/zhpan/circleviewpager/fragment/FindFragment.java index 8567f8b6..8e71b2fc 100644 --- a/app/src/main/java/com/example/zhpan/circleviewpager/activity/PageStyleActivity.java +++ b/app/src/main/java/com/example/zhpan/circleviewpager/fragment/FindFragment.java @@ -1,29 +1,56 @@ -package com.example.zhpan.circleviewpager.activity; +package com.example.zhpan.circleviewpager.fragment; import android.graphics.Color; import android.os.Bundle; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.widget.RadioButton; import android.widget.RadioGroup; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import com.example.zhpan.circleviewpager.R; +import com.example.zhpan.circleviewpager.view.FigureIndicatorView; import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder; import com.zhpan.bannerview.BannerViewPager; import com.zhpan.bannerview.annotation.APageStyle; +import com.zhpan.bannerview.constants.IndicatorGravity; +import com.zhpan.bannerview.constants.IndicatorStyle; import com.zhpan.bannerview.constants.PageStyle; import com.zhpan.bannerview.indicator.BaseIndicatorView; import com.zhpan.bannerview.indicator.CircleIndicatorView; import com.zhpan.bannerview.utils.DpUtils; import com.zhpan.idea.utils.ToastUtils; -public class PageStyleActivity extends BaseDataActivity { - private BannerViewPager mViewPager; +import butterknife.BindView; + +/** + * Created by zhpan on 2018/7/24. + */ +public class FindFragment extends BaseFragment { + @BindView(R.id.banner_view) + BannerViewPager mViewPager; + @BindView(R.id.rg_page_style) + RadioGroup mRadioGroupPageStyle; + @BindView(R.id.indicator_view) + CircleIndicatorView indicatorView; + @BindView(R.id.rb_multi_page) + RadioButton radioButton; + + @Override + protected int getLayout() { + return R.layout.fragment_find; + } + + @Override + protected void initTitle() { + + } @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_page_style); - mViewPager = findViewById(R.id.banner_view); + protected void initView(Bundle savedInstanceState, View view) { mViewPager .setPageMargin(DpUtils.dp2px(10)) .setRevealWidth(DpUtils.dp2px(10)) @@ -34,6 +61,16 @@ protected void onCreate(Bundle savedInstanceState) { initRadioGroup(); } + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return super.onCreateView(inflater, container, savedInstanceState); + } + + public static FindFragment getInstance() { + return new FindFragment(); + } + private void setupBanner(@APageStyle int pageStyle) { mViewPager .setPageStyle(pageStyle) @@ -41,8 +78,7 @@ private void setupBanner(@APageStyle int pageStyle) { } private void initRadioGroup() { - RadioGroup radioGroupStyle = findViewById(R.id.rg_indicator_style); - radioGroupStyle.setOnCheckedChangeListener((group, checkedId) -> { + mRadioGroupPageStyle.setOnCheckedChangeListener((group, checkedId) -> { switch (checkedId) { case R.id.rb_multi_page: setupBanner(PageStyle.MULTI_PAGE); @@ -55,7 +91,6 @@ private void initRadioGroup() { break; } }); - RadioButton radioButton = findViewById(R.id.rb_multi_page); radioButton.performClick(); } @@ -68,20 +103,19 @@ private void setupOverlapBanner() { } private BaseIndicatorView setupIndicatorView() { - CircleIndicatorView indicatorView = findViewById(R.id.indicator_view); indicatorView.setCheckedColor(Color.parseColor("#935656")); indicatorView.setNormalColor(Color.parseColor("#FF4C39")); return indicatorView; } @Override - protected void onStop() { + public void onStop() { super.onStop(); mViewPager.stopLoop(); } @Override - protected void onResume() { + public void onResume() { super.onResume(); mViewPager.startLoop(); } diff --git a/app/src/main/java/com/example/zhpan/circleviewpager/activity/NetworkBannerActivity.java b/app/src/main/java/com/example/zhpan/circleviewpager/fragment/HomeFragment.java similarity index 77% rename from app/src/main/java/com/example/zhpan/circleviewpager/activity/NetworkBannerActivity.java rename to app/src/main/java/com/example/zhpan/circleviewpager/fragment/HomeFragment.java index 20b41c8f..5531cc91 100644 --- a/app/src/main/java/com/example/zhpan/circleviewpager/activity/NetworkBannerActivity.java +++ b/app/src/main/java/com/example/zhpan/circleviewpager/fragment/HomeFragment.java @@ -1,15 +1,15 @@ -package com.example.zhpan.circleviewpager.activity; +package com.example.zhpan.circleviewpager.fragment; import android.graphics.Color; import android.os.Bundle; - -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.LinearLayoutManager; - import android.view.LayoutInflater; import android.view.View; +import android.widget.TextView; import android.widget.Toast; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; + import com.example.zhpan.circleviewpager.R; import com.example.zhpan.circleviewpager.adapter.ArticleAdapter; import com.example.zhpan.circleviewpager.bean.ArticleWrapper; @@ -20,7 +20,6 @@ import com.example.zhpan.circleviewpager.viewholder.NetViewHolder; import com.scwang.smartrefresh.header.MaterialHeader; import com.scwang.smartrefresh.layout.SmartRefreshLayout; -import com.trello.rxlifecycle2.components.support.RxAppCompatActivity; import com.zhpan.bannerview.BannerViewPager; import com.zhpan.bannerview.constants.IndicatorGravity; import com.zhpan.bannerview.utils.DpUtils; @@ -33,7 +32,10 @@ import io.reactivex.Observable; import io.reactivex.schedulers.Schedulers; -public class NetworkBannerActivity extends RxAppCompatActivity { +/** + * Created by zhpan on 2018/7/24. + */ +public class HomeFragment extends BaseFragment { private BannerViewPager mBannerViewPager; private CustomRecyclerView recyclerView; @@ -41,29 +43,40 @@ public class NetworkBannerActivity extends RxAppCompatActivity { private SmartRefreshLayout mSmartRefreshLayout; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_network_banner); - setTitle(R.string.load_data); - initRefreshLayout(); - initRecyclerView(); + protected int getLayout() { + return R.layout.fragment_home; + } + + @Override + protected void initTitle() { + + } + + @Override + protected void initView(Bundle savedInstanceState, View view) { + initRecyclerView(view); + initRefreshLayout(view); initBanner(); fetchData(true); } - private void initRecyclerView() { - recyclerView = findViewById(R.id.recycler_view); - recyclerView.setLayoutManager(new LinearLayoutManager(this)); + public static HomeFragment getInstance() { + return new HomeFragment(); + } + + private void initRecyclerView(View view) { + recyclerView = view.findViewById(R.id.recycler_view); + recyclerView.setLayoutManager(new LinearLayoutManager(mContext)); recyclerView.addHeadView(getHeaderView()); - recyclerView.addItemDecoration(new DividerItemDecoration(NetworkBannerActivity.this, + recyclerView.addItemDecoration(new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL)); - articleAdapter = new ArticleAdapter(this, new ArrayList<>()); + articleAdapter = new ArticleAdapter(mContext, new ArrayList<>()); recyclerView.setAdapter(articleAdapter); } - private void initRefreshLayout() { - mSmartRefreshLayout = findViewById(R.id.refresh_layout); - mSmartRefreshLayout.setRefreshHeader(new MaterialHeader(this)); + private void initRefreshLayout(View view) { + mSmartRefreshLayout = view.findViewById(R.id.refresh_layout); + mSmartRefreshLayout.setRefreshHeader(new MaterialHeader(mContext)); mSmartRefreshLayout.setOnRefreshListener(refreshLayout -> fetchData(false)); } @@ -108,29 +121,27 @@ private void initBanner() { .setScrollDuration(1000).setHolderCreator(NetViewHolder::new) .setOnPageClickListener(position -> { BannerData bannerData = mBannerViewPager.getList().get(position); - Toast.makeText(NetworkBannerActivity.this, + Toast.makeText(mContext, "点击了position:" + position + " " + bannerData.getDesc(), Toast.LENGTH_SHORT).show(); }); } private View getHeaderView() { - View view = LayoutInflater.from(this).inflate(R.layout.item_header_view, recyclerView, false); + View view = LayoutInflater.from(mContext).inflate(R.layout.item_header_view, recyclerView, false); mBannerViewPager = view.findViewById(R.id.banner_view); return view; } @Override - protected void onStop() { + public void onStop() { + mBannerViewPager.stopLoop(); super.onStop(); - if (mBannerViewPager != null) - mBannerViewPager.stopLoop(); } @Override - protected void onResume() { + public void onResume() { + mBannerViewPager.startLoop(); super.onResume(); - if (mBannerViewPager != null) - mBannerViewPager.startLoop(); } } diff --git a/app/src/main/java/com/example/zhpan/circleviewpager/activity/IndicatorStyleActivity.java b/app/src/main/java/com/example/zhpan/circleviewpager/fragment/OthersFragment.java similarity index 77% rename from app/src/main/java/com/example/zhpan/circleviewpager/activity/IndicatorStyleActivity.java rename to app/src/main/java/com/example/zhpan/circleviewpager/fragment/OthersFragment.java index 85e1f496..d703c65d 100644 --- a/app/src/main/java/com/example/zhpan/circleviewpager/activity/IndicatorStyleActivity.java +++ b/app/src/main/java/com/example/zhpan/circleviewpager/fragment/OthersFragment.java @@ -1,6 +1,6 @@ -package com.example.zhpan.circleviewpager.activity; - +package com.example.zhpan.circleviewpager.fragment; +import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.view.View; @@ -8,6 +8,7 @@ import android.widget.RadioGroup; import com.example.zhpan.circleviewpager.R; +import com.example.zhpan.circleviewpager.activity.PhotoViewActivity; import com.example.zhpan.circleviewpager.view.FigureIndicatorView; import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder; import com.zhpan.bannerview.BannerViewPager; @@ -16,23 +17,42 @@ import com.zhpan.bannerview.utils.DpUtils; import com.zhpan.idea.utils.ToastUtils; -public class IndicatorStyleActivity extends BaseDataActivity { +import butterknife.BindView; +import butterknife.OnClick; + +/** + * Created by zhpan on 2018/7/24. + */ +public class OthersFragment extends BaseFragment { + @BindView(R.id.banner_view) + BannerViewPager mViewPager; + @BindView(R.id.rg_indicator_style) + RadioGroup radioGroupStyle; + @BindView(R.id.rb_circle) + RadioButton radioButton; + + @Override + protected int getLayout() { + return R.layout.fragment_others; + } + + @Override + protected void initTitle() { - private BannerViewPager mViewPager; + } @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_indicator_slide_mode); - setTitle(getString(R.string.indicator_style)); - mViewPager = findViewById(R.id.banner_view_dash); + protected void initView(Bundle savedInstanceState, View view) { mViewPager.setIndicatorGap(DpUtils.dp2px(6)) .setHolderCreator(() -> new ImageResourceViewHolder(0)); initRadioGroup(); } + public static OthersFragment getInstance() { + return new OthersFragment(); + } + private void initRadioGroup() { - RadioGroup radioGroupStyle = findViewById(R.id.rg_indicator_style); radioGroupStyle.setVisibility(View.VISIBLE); radioGroupStyle.setVisibility(View.VISIBLE); radioGroupStyle.setOnCheckedChangeListener((group, checkedId) -> { @@ -50,7 +70,6 @@ private void initRadioGroup() { break; } }); - RadioButton radioButton = findViewById(R.id.rb_circle); radioButton.performClick(); } @@ -77,7 +96,6 @@ private void setupDashIndicator() { } private void setupCustomIndicator() { - mViewPager = findViewById(R.id.banner_view_dash); mViewPager.setAutoPlay(false).setCanLoop(true) .setPageMargin(DpUtils.dp2px(20)) .setIndicatorMargin(0, 0, DpUtils.dp2px(10), DpUtils.dp2px(10)) @@ -90,16 +108,21 @@ private void setupCustomIndicator() { * 这里可以是自定义的Indicator,需要继承BaseIndicatorView或者实现IIndicator接口; */ private FigureIndicatorView setupIndicatorView() { - FigureIndicatorView indicatorView = new FigureIndicatorView(this); + FigureIndicatorView indicatorView = new FigureIndicatorView(mContext); indicatorView.setRadius(DpUtils.dp2px(18)); indicatorView.setTextSize(DpUtils.dp2px(13)); indicatorView.setBackgroundColor(Color.parseColor("#aa118EEA")); return indicatorView; } + @OnClick(R.id.tv_photo_view) + public void onClick(View view) { + startActivity(new Intent(getActivity(), PhotoViewActivity.class)); + } + @Override - protected void onDestroy() { - super.onDestroy(); + public void onDestroy() { mViewPager.stopLoop(); + super.onDestroy(); } } diff --git a/app/src/main/res/drawable-xhdpi/creative_hover.png b/app/src/main/res/drawable-xhdpi/creative_hover.png new file mode 100644 index 00000000..3a0f25fe Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/creative_hover.png differ diff --git a/app/src/main/res/drawable-xhdpi/creative_none.png b/app/src/main/res/drawable-xhdpi/creative_none.png new file mode 100644 index 00000000..7dcc6568 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/creative_none.png differ diff --git a/app/src/main/res/drawable-xhdpi/discover_hover.png b/app/src/main/res/drawable-xhdpi/discover_hover.png new file mode 100644 index 00000000..bcbba5ac Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/discover_hover.png differ diff --git a/app/src/main/res/drawable-xhdpi/discover_none.png b/app/src/main/res/drawable-xhdpi/discover_none.png new file mode 100644 index 00000000..7e086b52 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/discover_none.png differ diff --git a/app/src/main/res/drawable-xhdpi/home_hover.png b/app/src/main/res/drawable-xhdpi/home_hover.png new file mode 100644 index 00000000..86219107 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/home_hover.png differ diff --git a/app/src/main/res/drawable-xhdpi/home_none.png b/app/src/main/res/drawable-xhdpi/home_none.png new file mode 100644 index 00000000..e145c154 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/home_none.png differ diff --git a/app/src/main/res/drawable-xxhdpi/guide0.jpg b/app/src/main/res/drawable-xxhdpi/guide0.jpg index 88020ef7..e85a58a4 100644 Binary files a/app/src/main/res/drawable-xxhdpi/guide0.jpg and b/app/src/main/res/drawable-xxhdpi/guide0.jpg differ diff --git a/app/src/main/res/drawable-xxhdpi/guide1.jpg b/app/src/main/res/drawable-xxhdpi/guide1.jpg index fe8a3b0d..8802c79d 100644 Binary files a/app/src/main/res/drawable-xxhdpi/guide1.jpg and b/app/src/main/res/drawable-xxhdpi/guide1.jpg differ diff --git a/app/src/main/res/drawable-xxhdpi/guide2.jpg b/app/src/main/res/drawable-xxhdpi/guide2.jpg index 25f9ffc2..53e6302d 100644 Binary files a/app/src/main/res/drawable-xxhdpi/guide2.jpg and b/app/src/main/res/drawable-xxhdpi/guide2.jpg differ diff --git a/app/src/main/res/drawable/tab1_selector.xml b/app/src/main/res/drawable/tab1_selector.xml new file mode 100644 index 00000000..5a8640f1 --- /dev/null +++ b/app/src/main/res/drawable/tab1_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tab2_selector.xml b/app/src/main/res/drawable/tab2_selector.xml new file mode 100644 index 00000000..8f9f8129 --- /dev/null +++ b/app/src/main/res/drawable/tab2_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tab3_selector.xml b/app/src/main/res/drawable/tab3_selector.xml new file mode 100644 index 00000000..f7ec448c --- /dev/null +++ b/app/src/main/res/drawable/tab3_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/text_color_selector.xml b/app/src/main/res/drawable/text_color_selector.xml new file mode 100644 index 00000000..ed1bb7cd --- /dev/null +++ b/app/src/main/res/drawable/text_color_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_customer_banner.xml b/app/src/main/res/layout/activity_customer_banner.xml deleted file mode 100644 index a481b9c3..00000000 --- a/app/src/main/res/layout/activity_customer_banner.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_indicator_slide_mode.xml b/app/src/main/res/layout/activity_indicator_slide_mode.xml index e7d27ef2..e6c52801 100644 --- a/app/src/main/res/layout/activity_indicator_slide_mode.xml +++ b/app/src/main/res/layout/activity_indicator_slide_mode.xml @@ -4,8 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical" - tools:context=".activity.IndicatorStyleActivity"> + android:orientation="vertical"> - + + + + + + + + + + + + + + + + + + + + + + + + + –> - +--> diff --git a/app/src/main/res/layout/activity_page_style.xml b/app/src/main/res/layout/activity_page_style.xml index 7f8d70ea..3034f9fc 100644 --- a/app/src/main/res/layout/activity_page_style.xml +++ b/app/src/main/res/layout/activity_page_style.xml @@ -3,8 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent" - tools:context=".activity.PageStyleActivity"> + android:layout_height="match_parent"> - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_welcome.xml b/app/src/main/res/layout/activity_welcome.xml new file mode 100644 index 00000000..61f2a98e --- /dev/null +++ b/app/src/main/res/layout/activity_welcome.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_find.xml b/app/src/main/res/layout/fragment_find.xml new file mode 100644 index 00000000..a17f4ddc --- /dev/null +++ b/app/src/main/res/layout/fragment_find.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_network_banner.xml b/app/src/main/res/layout/fragment_home.xml similarity index 71% rename from app/src/main/res/layout/activity_network_banner.xml rename to app/src/main/res/layout/fragment_home.xml index f6c2a094..b0c13524 100644 --- a/app/src/main/res/layout/activity_network_banner.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -1,20 +1,18 @@ + android:orientation="vertical"> + android:layout_height="match_parent" + android:overScrollMode="never"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/fragment_others.xml b/app/src/main/res/layout/fragment_others.xml new file mode 100644 index 00000000..0a36451a --- /dev/null +++ b/app/src/main/res/layout/fragment_others.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_custom_view.xml b/app/src/main/res/layout/item_custom_view.xml index 0fa49a71..0ba895c1 100644 --- a/app/src/main/res/layout/item_custom_view.xml +++ b/app/src/main/res/layout/item_custom_view.xml @@ -3,6 +3,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_header_view.xml b/app/src/main/res/layout/item_header_view.xml index afc49db7..dc49a835 100644 --- a/app/src/main/res/layout/item_header_view.xml +++ b/app/src/main/res/layout/item_header_view.xml @@ -1,13 +1,12 @@ + android:layout_height="wrap_content"> + android:layout_height="180dp" /> diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 026129ad..a1867bd9 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,4 +7,11 @@ #FF5252 #88FF5252 + #FFFFFF + #BFFFFFFF + + + #000000 + #000000 + #DCDCDC diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5a44233c..b73b05cc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,4 +13,10 @@ SMOOTH 自定义IndicatorView 一屏多页 + + 首页 + 发现 + 其它 + Page Style: + Indicator Style: diff --git a/bannerview/src/main/res/values/dimens.xml b/bannerview/src/main/res/values/dimens.xml new file mode 100755 index 00000000..53c7c21f --- /dev/null +++ b/bannerview/src/main/res/values/dimens.xml @@ -0,0 +1,453 @@ + + + -130dp + -110dp + -100dp + -90dp + -80dp + -70dp + -60dp + -50dp + -40dp + -35dp + -30dp + -20dp + -19dp + -18dp + -17dp + -16dp + -15dp + -14dp + -13dp + -12dp + -11dp + -10dp + -9dp + -8dp + -7dp + -6dp + -5dp + -4dp + -3dp + -2dp + -1dp + 0dp + 0.1dp + 0.5dp + 1dp + 1.5dp + 2dp + 2.5dp + 3dp + 4dp + 4.50dp + 5dp + 6dp + 7dp + 7.5dp + 8dp + 9dp + 10dp + 11dp + 12dp + 13dp + 14dp + 15dp + 16dp + 17dp + 18dp + 19dp + 20dp + 21dp + 22dp + 23dp + 24dp + 25dp + 26dp + 27dp + 28dp + 29dp + 30dp + 31dp + 32dp + 33dp + 34dp + 35dp + 36dp + 37dp + 38dp + 39dp + 40dp + 41dp + 42dp + 43dp + 44dp + 45dp + 46dp + 47dp + 48dp + 49dp + 50dp + 51dp + 52dp + 53dp + 54dp + 55dp + 56dp + 57dp + 58dp + 59dp + 60dp + 61dp + 62dp + 63dp + 64dp + 65dp + 66dp + 67dp + 68dp + 69dp + 70dp + 71dp + 72dp + 73dp + 74dp + 75dp + 76dp + 77dp + 78dp + 79dp + 80dp + 81dp + 82dp + 83dp + 84dp + 85dp + 86dp + 87dp + 88dp + 89dp + 90dp + 91dp + 92dp + 93dp + 94dp + 95dp + 96dp + 97dp + 98dp + 99dp + 100dp + 101dp + 102dp + 103dp + 104dp + 104.5dp + 105dp + 106dp + 107dp + 108dp + 109dp + 110dp + 111dp + 112dp + 113dp + 114dp + 115dp + 116dp + 117dp + 118dp + 119dp + 120dp + 121dp + 122dp + 123dp + 124dp + 125dp + 126dp + 127dp + 128dp + 129dp + 130dp + 131dp + 132dp + 133dp + 134dp + 134.5dp + 135dp + 136dp + 137dp + 138dp + 139dp + 140dp + 141dp + 142dp + 143dp + 144dp + 145dp + 146dp + 147dp + 148dp + 149dp + 150dp + 151dp + 152dp + 153dp + 154dp + 155dp + 156dp + 157dp + 158dp + 159dp + 160dp + 161dp + 162dp + 163dp + 164dp + 165dp + 166dp + 167dp + 168dp + 169dp + 170dp + 171dp + 172dp + 173dp + 174dp + 175dp + 176dp + 177dp + 178dp + 179dp + 180dp + 181dp + 182dp + 183dp + 184dp + 185dp + 186dp + 187dp + 188dp + 189dp + 190dp + 191dp + 192dp + 193dp + 194dp + 195dp + 196dp + 197dp + 198dp + 199dp + 200dp + 201dp + 202dp + 203dp + 204dp + 205dp + 206dp + 207dp + 208dp + 209dp + 210dp + 211dp + 212dp + 213dp + 214dp + 215dp + 216dp + 217dp + 218dp + 219dp + 220dp + 221dp + 222dp + 223dp + 224dp + 225dp + 226dp + 227dp + 228dp + 229dp + 230dp + 231dp + 232dp + 233dp + 234dp + 235dp + 236dp + 237dp + 238dp + 239dp + 240dp + 241dp + 242dp + 243dp + 244dp + 245dp + 246dp + 247dp + 248dp + 249dp + 250dp + 251dp + 252dp + 253dp + 254dp + 255dp + 256dp + 257dp + 258dp + 259dp + 260dp + 261dp + 262dp + 263dp + 264dp + 265dp + 266dp + 267dp + 268dp + 269dp + 270dp + 271dp + 272dp + 273dp + 274dp + 275dp + 276dp + 277dp + 278dp + 279dp + 280dp + 281dp + 282dp + 283dp + 284dp + 285dp + 286dp + 287dp + 289dp + 290dp + 291dp + 292dp + 293dp + 294dp + 295dp + 296dp + 297dp + 298dp + 299dp + 300dp + 301dp + 302dp + 303dp + 304dp + 305dp + 306dp + 307dp + 308dp + 309dp + 310dp + 311dp + 312dp + 313dp + 314dp + 315dp + 316dp + 317dp + 318dp + 319dp + 320dp + 321dp + 322dp + 323dp + 324dp + 325dp + 326dp + 327dp + 328dp + 329dp + 330dp + 331dp + 332dp + 333dp + 334dp + 335dp + 336dp + 337dp + 338dp + 339dp + 340dp + 341dp + 342dp + 343dp + 344dp + 345dp + 346dp + 347dp + 348dp + 349dp + 350dp + 351dp + 352dp + 353dp + 354dp + 355dp + 356dp + 357dp + 358dp + 359dp + 360dp + 365dp + 370dp + 375dp + 380dp + 385dp + 390dp + 395dp + 400dp + 410dp + 422dp + 472dp + 500dp + 600dp + 640dp + 720dp + + + 6sp + 7sp + 8sp + 9sp + 10sp + 11sp + 12sp + 13sp + 14sp + 15sp + 16sp + 17sp + 18sp + 19sp + 20sp + 21sp + 22sp + 23sp + 24sp + 25sp + 26sp + 27sp + 28sp + 30sp + 31sp + 32sp + 33sp + 34sp + 35sp + 36sp + 38sp + 40sp + 42sp + 48sp + diff --git a/download/app.apk b/download/app.apk index 30cef227..63d77664 100644 Binary files a/download/app.apk and b/download/app.apk differ diff --git a/ideahttp/src/main/java/com/zhpan/idea/utils/RxUtil.java b/ideahttp/src/main/java/com/zhpan/idea/utils/RxUtil.java index 7e9691f3..d5a5758d 100644 --- a/ideahttp/src/main/java/com/zhpan/idea/utils/RxUtil.java +++ b/ideahttp/src/main/java/com/zhpan/idea/utils/RxUtil.java @@ -42,14 +42,18 @@ public ObservableSource apply(Observable observable) { * @param * @return */ - public static ObservableTransformer rxSchedulerHelper(final RxFragment fragment) { //compose简化线程 + public static ObservableTransformer rxSchedulerHelper(final RxFragment fragment, final boolean showLoading) { return new ObservableTransformer() { @Override public ObservableSource apply(Observable observable) { - return observable.subscribeOn(Schedulers.io()) + Observable compose = observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .compose(ProgressUtils.applyProgressBar(fragment.getActivity())) - .compose(fragment.bindUntilEvent(FragmentEvent.DESTROY_VIEW)); + .compose(fragment.bindUntilEvent(FragmentEvent.DESTROY)); + if (showLoading) { + return compose.compose(ProgressUtils.applyProgressBar(fragment.getActivity())); + } else { + return compose; + } } }; }