OthersFragment.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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 com.example.zhpan.circleviewpager.R;
  9. import com.example.zhpan.circleviewpager.activity.PhotoViewActivity;
  10. import com.example.zhpan.circleviewpager.view.FigureIndicatorView;
  11. import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder;
  12. import com.zhpan.bannerview.BannerViewPager;
  13. import com.zhpan.bannerview.constants.IndicatorGravity;
  14. import com.zhpan.bannerview.constants.IndicatorSlideMode;
  15. import com.zhpan.bannerview.indicator.IIndicator;
  16. import com.zhpan.bannerview.indicator.IndicatorView;
  17. import com.zhpan.bannerview.utils.BannerUtils;
  18. import com.zhpan.idea.utils.ToastUtils;
  19. import java.lang.reflect.Field;
  20. import java.util.Random;
  21. /**
  22. * Created by zhpan on 2018/7/24.
  23. */
  24. public class OthersFragment extends BaseFragment implements View.OnClickListener {
  25. private BannerViewPager<Integer, ImageResourceViewHolder> mViewPager;
  26. private RadioGroup radioGroupStyle;
  27. private RadioButton radioButton;
  28. private IndicatorView mIndicatorView;
  29. @Override
  30. protected int getLayout() {
  31. return R.layout.fragment_others;
  32. }
  33. @Override
  34. protected void initTitle() {
  35. }
  36. @Override
  37. public void onPause() {
  38. super.onPause();
  39. if (mViewPager != null) {
  40. mViewPager.stopLoop();
  41. }
  42. }
  43. @Override
  44. public void onResume() {
  45. super.onResume();
  46. if (mViewPager != null) {
  47. mViewPager.startLoop();
  48. }
  49. }
  50. @Override
  51. protected void initView(Bundle savedInstanceState, View view) {
  52. radioButton = view.findViewById(R.id.rb_indicator_below);
  53. radioGroupStyle = view.findViewById(R.id.rg_indicator_style);
  54. mViewPager = view.findViewById(R.id.banner_view);
  55. mIndicatorView = view.findViewById(R.id.indicator_view);
  56. view.findViewById(R.id.tv_photo_view).setOnClickListener(this);
  57. view.findViewById(R.id.btn_refresh).setOnClickListener(v -> updateData());
  58. mViewPager.setIndicatorGap(BannerUtils.dp2px(6))
  59. .setRoundCorner(BannerUtils.dp2px(6))
  60. .setOnPageClickListener(position -> ToastUtils.show("Position:" + position))
  61. .setIndicatorColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
  62. .setHolderCreator(() -> new ImageResourceViewHolder(0));
  63. initRadioGroup();
  64. }
  65. public static OthersFragment getInstance() {
  66. return new OthersFragment();
  67. }
  68. private void initRadioGroup() {
  69. radioGroupStyle.setVisibility(View.VISIBLE);
  70. radioGroupStyle.setVisibility(View.VISIBLE);
  71. radioGroupStyle.setOnCheckedChangeListener((group, checkedId) -> {
  72. switch (checkedId) {
  73. case R.id.rb_indicator_below:
  74. resetBannerViewPager();
  75. setIndicatorBelowOfBanner();
  76. break;
  77. case R.id.rb_dash:
  78. resetBannerViewPager();
  79. setupCustomIndicator();
  80. break;
  81. }
  82. });
  83. radioButton.performClick();
  84. }
  85. private void setIndicatorBelowOfBanner() {
  86. mIndicatorView.setVisibility(View.VISIBLE);
  87. mViewPager
  88. .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
  89. .setIndicatorVisibility(View.GONE)
  90. .setIndicatorView(mIndicatorView)
  91. .create(getMDrawableList());
  92. }
  93. private void setupCustomIndicator() {
  94. mIndicatorView.setVisibility(View.INVISIBLE);
  95. mViewPager.setAutoPlay(false).setCanLoop(true)
  96. .setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
  97. .setIndicatorVisibility(View.VISIBLE)
  98. .setPageMargin(BannerUtils.dp2px(20))
  99. .setIndicatorGravity(IndicatorGravity.END)
  100. .setIndicatorView(setupIndicatorView())
  101. .setHolderCreator(() -> new ImageResourceViewHolder(0)).create(getMDrawableList());
  102. }
  103. /**
  104. * 这里可以是自定义的Indicator,需要继承BaseIndicatorView或者实现IIndicator接口;
  105. */
  106. private IIndicator setupIndicatorView() {
  107. FigureIndicatorView indicatorView = new FigureIndicatorView(getMContext());
  108. indicatorView.setRadius(BannerUtils.dp2px(18));
  109. indicatorView.setTextSize(BannerUtils.dp2px(13));
  110. indicatorView.setBackgroundColor(Color.parseColor("#aa118EEA"));
  111. return indicatorView;
  112. }
  113. private void updateData() {
  114. // 生成[-1,3]整数
  115. initData(new Random().nextInt(5) - 1);
  116. ToastUtils.show("size=" + getMDrawableList().size());
  117. mViewPager.create(getMDrawableList());
  118. }
  119. @Override
  120. public void onClick(View view) {
  121. startActivity(new Intent(getActivity(), PhotoViewActivity.class));
  122. }
  123. private void resetBannerViewPager() {
  124. try {
  125. Field mIndicatorView = BannerViewPager.class.getDeclaredField("mIndicatorView");
  126. mIndicatorView.setAccessible(true);
  127. mIndicatorView.set(mViewPager, null);
  128. Field isCustomIndicator = BannerViewPager.class.getDeclaredField("isCustomIndicator");
  129. isCustomIndicator.setAccessible(true);
  130. isCustomIndicator.set(mViewPager, false);
  131. } catch (IllegalAccessException | NoSuchFieldException e) {
  132. e.printStackTrace();
  133. }
  134. }
  135. }