OthersFragment.java 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package com.example.zhpan.circleviewpager.fragment;
  2. import android.content.Intent;
  3. import android.graphics.Color;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.RadioButton;
  7. import android.widget.RadioGroup;
  8. import androidx.annotation.NonNull;
  9. import com.example.zhpan.circleviewpager.R;
  10. import com.example.zhpan.circleviewpager.activity.PhotoViewActivity;
  11. import com.example.zhpan.circleviewpager.adapter.ImageResourceAdapter;
  12. import com.example.zhpan.circleviewpager.view.FigureIndicatorView;
  13. import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder;
  14. import com.scwang.smartrefresh.header.MaterialHeader;
  15. import com.scwang.smartrefresh.layout.SmartRefreshLayout;
  16. import com.zhpan.bannerview.BannerViewPager;
  17. import com.zhpan.bannerview.constants.IndicatorGravity;
  18. import com.zhpan.bannerview.utils.BannerUtils;
  19. import com.zhpan.idea.utils.LogUtils;
  20. import com.zhpan.idea.utils.ToastUtils;
  21. import com.zhpan.indicator.DrawableIndicator;
  22. import com.zhpan.indicator.IndicatorView;
  23. import com.zhpan.indicator.base.IIndicator;
  24. import com.zhpan.indicator.enums.IndicatorSlideMode;
  25. import java.util.Random;
  26. /**
  27. * Created by zhpan on 2018/7/24.
  28. */
  29. public class OthersFragment extends BaseFragment implements View.OnClickListener {
  30. private BannerViewPager<Integer, ImageResourceViewHolder> mViewPager;
  31. private RadioGroup radioGroupStyle;
  32. private RadioButton radioButton;
  33. private IndicatorView mIndicatorView;
  34. private SmartRefreshLayout mSmartRefreshLayout;
  35. public static OthersFragment getInstance() {
  36. return new OthersFragment();
  37. }
  38. @Override
  39. protected int getLayout() {
  40. return R.layout.fragment_others;
  41. }
  42. @Override
  43. protected void initTitle() {
  44. }
  45. private void initRefreshLayout(View view) {
  46. mSmartRefreshLayout = view.findViewById(R.id.refresh_layout);
  47. mSmartRefreshLayout.setRefreshHeader(new MaterialHeader(getMContext()));
  48. mSmartRefreshLayout.setOnRefreshListener(refreshLayout -> {
  49. updateData();
  50. mSmartRefreshLayout.finishRefresh();
  51. });
  52. }
  53. @Override
  54. public void onPause() {
  55. super.onPause();
  56. if (mViewPager != null) {
  57. mViewPager.stopLoop();
  58. }
  59. }
  60. @Override
  61. public void onResume() {
  62. super.onResume();
  63. if (mViewPager != null) {
  64. mViewPager.startLoop();
  65. }
  66. }
  67. @Override
  68. protected void initView(Bundle savedInstanceState, @NonNull View view) {
  69. initRefreshLayout(view);
  70. radioButton = view.findViewById(R.id.rb_indicator_below);
  71. radioGroupStyle = view.findViewById(R.id.rg_indicator_style);
  72. mViewPager = view.findViewById(R.id.banner_view);
  73. mIndicatorView = view.findViewById(R.id.indicator_view);
  74. view.findViewById(R.id.tv_photo_view).setOnClickListener(this);
  75. mViewPager.setIndicatorSliderGap(BannerUtils.dp2px(6))
  76. .setIndicatorView(mIndicatorView)
  77. .setRoundCorner(BannerUtils.dp2px(6))
  78. .setOnPageClickListener(position -> {
  79. ToastUtils.show("position:" + position);
  80. int currentItem = mViewPager.getCurrentItem();
  81. LogUtils.e("currentItem:", currentItem + "");
  82. })
  83. .setAdapter(new ImageResourceAdapter(0))
  84. .setOnPageClickListener(position -> ToastUtils.show("Position:" + position))
  85. .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color)).create();
  86. initRadioGroup();
  87. }
  88. private void initRadioGroup() {
  89. radioGroupStyle.setVisibility(View.VISIBLE);
  90. radioGroupStyle.setOnCheckedChangeListener((group, checkedId) -> {
  91. switch (checkedId) {
  92. case R.id.rb_indicator_below:
  93. setIndicatorBelowOfBanner();
  94. break;
  95. case R.id.rb_dash:
  96. setupCustomIndicator();
  97. break;
  98. case R.id.rb_drawable:
  99. setDrawableIndicator(getDrawableIndicator());
  100. break;
  101. case R.id.rb_vector_drawable:
  102. setDrawableIndicator(getVectorDrawableIndicator());
  103. break;
  104. }
  105. });
  106. radioButton.performClick();
  107. }
  108. private void setDrawableIndicator(IIndicator indicator) {
  109. mIndicatorView.setVisibility(View.INVISIBLE);
  110. mViewPager
  111. .setIndicatorView(indicator)
  112. .setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
  113. .setIndicatorVisibility(View.VISIBLE)
  114. .setIndicatorGravity(IndicatorGravity.CENTER)
  115. .refreshData(getMDrawableList());
  116. }
  117. private void setIndicatorBelowOfBanner() {
  118. mIndicatorView.setVisibility(View.VISIBLE);
  119. mViewPager
  120. .setIndicatorVisibility(View.GONE)
  121. .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
  122. .setIndicatorView(mIndicatorView)
  123. .refreshData(getPicList(4));
  124. }
  125. private void setupCustomIndicator() {
  126. mIndicatorView.setVisibility(View.INVISIBLE);
  127. mViewPager.setAutoPlay(true).setCanLoop(true)
  128. .setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
  129. .setIndicatorVisibility(View.VISIBLE)
  130. .setIndicatorGravity(IndicatorGravity.END)
  131. .setIndicatorView(setupIndicatorView()).refreshData(getPicList(4));
  132. }
  133. private IIndicator getDrawableIndicator() {
  134. int dp10 = getResources().getDimensionPixelOffset(R.dimen.dp_10);
  135. return new DrawableIndicator(getContext())
  136. .setIndicatorGap(getResources().getDimensionPixelOffset(R.dimen.dp_2_5))
  137. .setIndicatorDrawable(R.drawable.heart_empty, R.drawable.heart_red)
  138. .setIndicatorSize(dp10, dp10, dp10, dp10);
  139. }
  140. private IIndicator getVectorDrawableIndicator() {
  141. int dp6 = getResources().getDimensionPixelOffset(R.dimen.dp_6);
  142. return new DrawableIndicator(getContext())
  143. .setIndicatorGap(getResources().getDimensionPixelOffset(R.dimen.dp_2_5))
  144. .setIndicatorDrawable(R.drawable.banner_indicator_nornal, R.drawable.banner_indicator_focus)
  145. .setIndicatorSize(dp6, dp6, getResources().getDimensionPixelOffset(R.dimen.dp_13), dp6);
  146. }
  147. /**
  148. * 这里可以是自定义的Indicator,需要继承BaseIndicatorView或者实现IIndicator接口;
  149. */
  150. private IIndicator setupIndicatorView() {
  151. FigureIndicatorView indicatorView = new FigureIndicatorView(getMContext());
  152. indicatorView.setRadius(getResources().getDimensionPixelOffset(R.dimen.dp_18));
  153. indicatorView.setTextSize(getResources().getDimensionPixelSize(R.dimen.sp_13));
  154. indicatorView.setBackgroundColor(Color.parseColor("#aa118EEA"));
  155. return indicatorView;
  156. }
  157. private void updateData() {
  158. mViewPager.refreshData(getPicList(new Random().nextInt(5) - 1));
  159. ToastUtils.show("size=" + mViewPager.getData().size());
  160. }
  161. @Override
  162. public void onClick(View view) {
  163. startActivity(new Intent(getActivity(), PhotoViewActivity.class));
  164. }
  165. }