From 99d9c3191dbee8c2793506261db199ff6081282e Mon Sep 17 00:00:00 2001 From: zhpanvip Date: Wed, 13 Nov 2019 22:45:00 +0800 Subject: [PATCH] Update Sample. (#26) * Update sample. --- app/build.gradle | 2 + app/src/main/AndroidManifest.xml | 19 +- .../activity/MainActivity.java | 84 +++- .../activity/PageTransformerActivity.java | 78 --- ...PageActivity.java => WelcomeActivity.java} | 33 +- .../adapter/AdapterFragmentPager.java | 64 +++ .../fragment/BaseFragment.java | 83 ++++ .../FindFragment.java} | 60 ++- .../HomeFragment.java} | 69 +-- .../OthersFragment.java} | 53 +- .../res/drawable-xhdpi/creative_hover.png | Bin 0 -> 1504 bytes .../main/res/drawable-xhdpi/creative_none.png | Bin 0 -> 1605 bytes .../res/drawable-xhdpi/discover_hover.png | Bin 0 -> 1991 bytes .../main/res/drawable-xhdpi/discover_none.png | Bin 0 -> 1978 bytes .../main/res/drawable-xhdpi/home_hover.png | Bin 0 -> 1557 bytes app/src/main/res/drawable-xhdpi/home_none.png | Bin 0 -> 1726 bytes app/src/main/res/drawable-xxhdpi/guide0.jpg | Bin 33936 -> 46776 bytes app/src/main/res/drawable-xxhdpi/guide1.jpg | Bin 31517 -> 44226 bytes app/src/main/res/drawable-xxhdpi/guide2.jpg | Bin 35848 -> 48957 bytes app/src/main/res/drawable/tab1_selector.xml | 6 + app/src/main/res/drawable/tab2_selector.xml | 5 + app/src/main/res/drawable/tab3_selector.xml | 5 + .../main/res/drawable/text_color_selector.xml | 6 + .../res/layout/activity_customer_banner.xml | 10 - .../layout/activity_indicator_slide_mode.xml | 3 +- app/src/main/res/layout/activity_main.xml | 89 +++- .../main/res/layout/activity_page_style.xml | 3 +- .../res/layout/activity_page_transformer.xml | 13 - app/src/main/res/layout/activity_welcome.xml | 19 + app/src/main/res/layout/fragment_find.xml | 63 +++ ...y_network_banner.xml => fragment_home.xml} | 10 +- app/src/main/res/layout/fragment_others.xml | 69 +++ app/src/main/res/layout/item_custom_view.xml | 10 +- app/src/main/res/layout/item_header_view.xml | 5 +- app/src/main/res/values/colors.xml | 7 + app/src/main/res/values/strings.xml | 6 + bannerview/src/main/res/values/dimens.xml | 453 ++++++++++++++++++ download/app.apk | Bin 4408680 -> 4508596 bytes .../java/com/zhpan/idea/utils/RxUtil.java | 12 +- 39 files changed, 1124 insertions(+), 215 deletions(-) delete mode 100644 app/src/main/java/com/example/zhpan/circleviewpager/activity/PageTransformerActivity.java rename app/src/main/java/com/example/zhpan/circleviewpager/activity/{CustomerBannerPageActivity.java => WelcomeActivity.java} (57%) create mode 100644 app/src/main/java/com/example/zhpan/circleviewpager/adapter/AdapterFragmentPager.java create mode 100644 app/src/main/java/com/example/zhpan/circleviewpager/fragment/BaseFragment.java rename app/src/main/java/com/example/zhpan/circleviewpager/{activity/PageStyleActivity.java => fragment/FindFragment.java} (62%) rename app/src/main/java/com/example/zhpan/circleviewpager/{activity/NetworkBannerActivity.java => fragment/HomeFragment.java} (77%) rename app/src/main/java/com/example/zhpan/circleviewpager/{activity/IndicatorStyleActivity.java => fragment/OthersFragment.java} (77%) create mode 100644 app/src/main/res/drawable-xhdpi/creative_hover.png create mode 100644 app/src/main/res/drawable-xhdpi/creative_none.png create mode 100644 app/src/main/res/drawable-xhdpi/discover_hover.png create mode 100644 app/src/main/res/drawable-xhdpi/discover_none.png create mode 100644 app/src/main/res/drawable-xhdpi/home_hover.png create mode 100644 app/src/main/res/drawable-xhdpi/home_none.png create mode 100644 app/src/main/res/drawable/tab1_selector.xml create mode 100644 app/src/main/res/drawable/tab2_selector.xml create mode 100644 app/src/main/res/drawable/tab3_selector.xml create mode 100644 app/src/main/res/drawable/text_color_selector.xml delete mode 100644 app/src/main/res/layout/activity_customer_banner.xml delete mode 100644 app/src/main/res/layout/activity_page_transformer.xml create mode 100644 app/src/main/res/layout/activity_welcome.xml create mode 100644 app/src/main/res/layout/fragment_find.xml rename app/src/main/res/layout/{activity_network_banner.xml => fragment_home.xml} (71%) create mode 100644 app/src/main/res/layout/fragment_others.xml create mode 100755 bannerview/src/main/res/values/dimens.xml 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 0000000000000000000000000000000000000000..3a0f25fe31f278b2ae5f2e9036024973eeae4339 GIT binary patch literal 1504 zcmeAS@N?(olHy`uVBq!ia0vp^`ao>J!3HE7mn%O4Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?{;ELn2Bde0{8v^K*7iAWdWaj57fJ{tG z$}cUkRRX#c;)UD-xUqS~&|m@vn0`fKfxe-h0mw@*g}%P{mFDKcRTq~8r6Sym)!^cg z%7Rq=pw#00(xPNw#HA^NtSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu09sGbq%|6*R&# z^HTE5i#5S|e0{Av^NLFn^O93NU2K(rrs!p6rdSy}o4Yu=8W}q|8WN@Uj$6rXZ~mjFfcF$ zc)B=-RNT5U%hvm_gT(R4QQTT9G+rnvHBAoP^@I1$oY-2)EYTx@f7tr^*750fWf*a? zh6^4&8_MEX7$6`b>yrB?-cwUv6BTwHa%>zwGgtG@;G>yOd5S*VMR#W!2SHMuk#8UrU_yz92oFq4H9=>O8IY{Fj#Oi)C-!qNftQ zXYQZ4*#|3Gb_oe({D|$#EOhMHbAQ!(k;_RRzGZ8h^iGn#Su|~`VBn{29`hx!_nTF0 zSa<1qI%>zK*Sy^68*Hxr_Nn0G2mKo#NE@gXepT7_^zl8R^$jwv+HsA-4;Cz7zh{18 z=Cr`WthcxME_r{@<;=z>SuqX44<7AN_bzwQdtbA}`cFgg20k~RqTH9CJDfl8o;#o= z;rC+qJhn+s|NfliGqHIS`@9v?wnr|h_@Ay&^-^PfbccFT7`wZj1dptMZtRoz21bVD WwO$3HuhuOBmARg-elF{r5}E+^hAyK3 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7dcc6568e6b7e8c0b634093bb361ed05b5a88f34 GIT binary patch literal 1605 zcmeAS@N?(olHy`uVBq!ia0vp^`ao>J!3HE7mn%O4Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?{;ELn2Bde0{8v^K*7iAWdWaj57fJ{tG z$}cUkRRX#c;)UD-xUqS~&|m@vn0`fKfxe-h0mw@*g}%P{mFDKcRTq~8r6Sym)!^cg z%7Rq=pw#00(xPNw#HA^NtSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu09sGbq%|6*R&# z^HTE5i#5S|e0{Av^NLFn^O93NU2K(rrs!p6rdYYSnz*`}8(TQJxSAUpx|&;Bm^ir^ zI-9vz7#Nv58(PBjy5uL9=BDPA!1Sgd^jhN73rY^T1wfl!Qj0RnQd8WD@^cly-nPob z?G`hf=0WwQ;C72SPQCg-$LND17b&t~LckORV#1RykONQrsd>N@Uj$6rY4I!g7#Ntg zdb&7=3eY-(|Tlc(0^ucZNZ$R zg-4wHSXvu;d%Geynx;NtZ))w5GU$-9oo{Y)D8+cQxw-ZGH+K(A)~WvevD$od@%G}A z)^q)?t$kWKPc>)vMCTLfPxw9^-MRF^Zq>xuE@G`mYaG7uF#S{cG<~L{+{T9fb4vcpd!H>%Kd}29!DD=6zJD8k3%~N?w!~S#PfOp-5UOFVkluMP*+=^LjGn5)S_kt_ z7ct)Ju?taa&wh0EVbl+g55`Lic=xc~$?WL7-n9C$>BCzUp*z&#WY@L&GhIKR-hBMn z`X3RunfKh)wo$wHt1?Ddj=TQMSA~U~{f+V6XFfYFcv?9}<3rG%bZON;Tc5jju&r;p ze|-7ZuP2!N?Jly)i^j3m^H%o1aadOIRs81v+#fGK1pHxpVtr75V(tmnXvSF|0%|VL z*f`b3-Ru_E1J8BY2b@3pci43Ad9dlsy>;4R2PXFbg+3%7seNi-*|g{JE=xa#nXEn^ zBG%scAn-@^ke>AGvZ8eX*Y3N7NwRW$o4WB%$b5zJ!AYE+1Cvbs6lf$xt@VsPKxCvAJPdYqou_=OtA{djvq z{>kx6CZ9eT{?{lvz2nvY&r{5|ywWNDxWjo`Zl5ym65knL?jJtkn9^G)D!*Ca=DXYj z@#aKN>biD2FcFwU~E4>z_ua@*ll--2D`zH_wVT|D*G1^8EvI z9kyxQt#LHZk+gd*uv7E(<**~qz3ngk%Xi$8xYtmlAUZpR`A*xM_i=x(hm}mMXX0VF XY!>zH-llh~pn~1g)z4*}Q$iB}tZ{Ow literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bcbba5ac8c973b43759d87b64a05d27bb56cbda3 GIT binary patch literal 1991 zcmaJ?c~ld39#4%zG*SgdLiw!JWcVflvAIr{rGr!|~KA-RPd2ebZ z$wE)J05=>C=P63$r(!GF`M&9beKQwKS7VDmD#$|9kV4cT)xo$pIZ^-vBDJ&#PKBlN zvJx8{jlf-iL;Z121#fxt@$ zs^WrwB$XwW0P%Msi11t`a!r-u}^wj{BOktA991?{dNv1$#4n(E^uO1MK zrjr*!sr-ajv9J>tRG_F9B9ROR1JOVuBDx|Hg~Q>H$W#)Q8i^qy^<^4VYK+wAL*^9t zuwJH9YEdPk0i24`0;Ck>f>@@1l%UqWmeuHAwFzq&$tcy5C`7Weq&c8i{Qse9^=q^q zO@;r=_kRlO)629lDHYZur8*flxWW);C@mDPgQX~a>SsIc*zlqA(2LpN;NWA#OH#T3Q?()LsT+{!(`EEJidTOp$J%PHkrX=@W>oy z0)rMu<;-#Uh^$l%YtT8a{7)`@Uar#)YAqI-59^d0VR?cMQ3Ef_hLrQ?LYY_Z6<0og zF4TFsBrF+{bGZLC?71ttcu3=7%+y<8_#|_Y8Qq;&2ODB7R)D@zxJHe_N9q zxAf!MDO11cYLfaXenVYgv{B@<%)Ro1{#y;-mP?ihQY0b1%C*10(NW!<85do%-zT)E zrl&i!HE^5nqJLhDqc2j5SF{&G%b!>6vhMnA1a5ZJIzDl1an!LJ2g8~D3%@bF85|qJo9JDBtix=>_vi9I--?1) zJbHxY0MTq_wcp0`!9lIHostE9bvsh zg5z?zf3;dY&gU;RAL{H(73ccZ>G=copt@`LKyPnQMrP*Nj=H)!#nrL;k9an$+{`;-5z*1Iw zM@PrW%A13O&FmQ#izP`(Ie+xaQ>NW(5#%^XIeI<7j~H&7nK|=$W!I5u4==A(m5+6& zH6Lk;i_>REM@IJ6%zVrv@YB{34urb8x=LxCS*ynkIY&mgLE*z|1TkVN{5oJEm@ue{Q?^^a> z+NUI2x_Wv%$H&K$e*D)Fd|1v_j@y}?RRc-9V8)_~95ki1yQ@oIL_W;f8@O`iI`N)w zlx|0(An4Q&a;0+di00%VEy%!&cPD2ntlix%cszb=+xD9SDwS%?ZV%O@$+h|xvw1RN zaZ8PPRqCb0wu28Agx$V7G_?7|3Cg;NmVWQ?L!S4%-VPSq*kR-5z3!UClD7f^7979n zo}HcDzO(%L#Z`2wo!8XVH1*`(rwWB)^R;VfM=X{b=&|OX^VfVk?dkXM;lrOCj<=ww zC`M4RO=xOcE$`p`&W^*S=AT%VjO$J9>3(zt({|r>Z-g@GgWjS&GVa?5PcpyCUp}8$1a|k5e0Br)q_5R$59waf4$avBHt{w!j+t zK2+MeZT-oT&ZOo|qXU=ryB@UM-Xz=v-&7~_SG@4c$8B%Do^tHYF2MO~6$z607GD0A F{{XT28A<>E literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7e086b52d23522abcc2945ce673453a15a90b7fa GIT binary patch literal 1978 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/guide0.jpg b/app/src/main/res/drawable-xxhdpi/guide0.jpg index 88020ef7a0193bcb9b19638b018644762e759e87..e85a58a43d467f7e3970f9ed0ceff08f53747827 100644 GIT binary patch literal 46776 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