OthersFragment.java 7.4 KB

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