PageControl.java 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. package com.grkj.iscs.widget;
  2. import android.content.Context;
  3. import android.util.AttributeSet;
  4. import android.view.Gravity;
  5. import android.view.View;
  6. import android.widget.LinearLayout;
  7. import android.widget.TextView;
  8. import androidx.annotation.Nullable;
  9. import com.grkj.iscs.R;
  10. import com.grkj.iscs.util.Utils;
  11. /**
  12. * @date 2018/12/16
  13. *
  14. * 分页
  15. */
  16. public class PageControl extends LinearLayout implements View.OnClickListener {
  17. private Context context;
  18. private int maxPage = 1;//最大页
  19. private int curPage = 1;//当前页
  20. private int buttonCount = 5;//按钮数
  21. private int lastButton = 0;//最后一个按钮对应的页码
  22. private int firstButton = 0;//第一个按钮对应的页码
  23. private int totalCount; //总页数
  24. public TextView upPage;//上一页
  25. public TextView downPage;//下一页
  26. public PageControl(Context context) {
  27. this(context, null);
  28. }
  29. public PageControl(Context context, @Nullable AttributeSet attrs) {
  30. this(context, attrs, 0);
  31. }
  32. public PageControl(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  33. super(context, attrs, defStyleAttr);
  34. this.context = context;
  35. this.setBackgroundResource(R.color.white);
  36. this.setGravity(Gravity.RIGHT);
  37. initPageComposite();
  38. }
  39. private OnPageChangeListener mPageChangeLinstener = new OnPageChangeListener() {
  40. @Override
  41. public void pageChanged(PageControl pageControl,int numPerPage) {
  42. if(mPageChangeLinstener != null){
  43. mPageChangeLinstener.pageChanged(pageControl,numPerPage);
  44. }
  45. }
  46. };
  47. public interface OnPageChangeListener {
  48. void pageChanged(PageControl pageControl,int numPerPage);
  49. }
  50. /**
  51. * @param tCount 总页数
  52. */
  53. public void setTotalPage(int tCount) {
  54. totalCount = tCount;
  55. setSelectView(curPage);
  56. }
  57. /**
  58. * 创建view
  59. * @return
  60. */
  61. private TextView createView() {
  62. TextView page = new TextView(context);
  63. // page.setBackgroundResource(R.drawable.selecter_btn_round5_gray);
  64. page.setPadding(Utils.INSTANCE.dip2px(10), 0, Utils.INSTANCE.dip2px(10), 0);
  65. page.setGravity(Gravity.CENTER);
  66. LayoutParams layoutParam = new LayoutParams(LayoutParams.WRAP_CONTENT, Utils.INSTANCE.dip2px(30));
  67. page.setMinWidth(Utils.INSTANCE.dip2px(30));
  68. layoutParam.setMargins(0, 0, Utils.INSTANCE.dip2px(5), 0);
  69. page.setLayoutParams(layoutParam);
  70. return page;
  71. }
  72. /**
  73. * 创建中间页码view
  74. * @param page
  75. */
  76. private void createView(int page) {
  77. TextView countPage = createView();
  78. countPage.setText(page + "");
  79. countPage.setTag(page);
  80. countPage.setOnClickListener(this);
  81. this.addView(countPage);
  82. }
  83. /**
  84. * 创建上一页view
  85. */
  86. private void createPrevious() {
  87. upPage = createView();
  88. // upPage.setText(getResources().getString(R.string.page_uppage));
  89. upPage.setText("上一页");
  90. upPage.setOnClickListener(this);
  91. this.addView(upPage, 0);
  92. }
  93. /**
  94. * 创建下一页view
  95. */
  96. private void createNext() {
  97. downPage = createView();
  98. // downPage.setText(getResources().getString(R.string.page_downpage));
  99. downPage.setText("下一页");
  100. downPage.setOnClickListener(this);
  101. this.addView(downPage);
  102. }
  103. /**
  104. * n个页 创建第一个view
  105. */
  106. private void first() {
  107. TextView first = createView();
  108. first.setText("1");
  109. first.setOnClickListener(this);
  110. this.addView(first);
  111. }
  112. /**
  113. * n个页 创建末页view
  114. */
  115. private void last() {
  116. TextView first = createView();
  117. first.setText(totalCount+"");
  118. first.setOnClickListener(this);
  119. this.addView(first);
  120. }
  121. /**
  122. * n个页 创建...
  123. */
  124. private void middleView() {
  125. TextView first = new TextView(context);
  126. first.setText("...");
  127. first.setPadding(Utils.INSTANCE.dip2px(10), 0, Utils.INSTANCE.dip2px(10), 0);
  128. first.setGravity(Gravity.CENTER);
  129. first.setOnClickListener(this);
  130. this.addView(first);
  131. }
  132. public void initPageComposite() {
  133. int temp = maxPage;
  134. maxPage = totalCount % 1 == 0 ? totalCount / 1 : totalCount / 1 + 1;
  135. if (temp != maxPage || curPage >= 1) {
  136. createAllView();
  137. }
  138. if (maxPage == 0) {
  139. removeAllViews();
  140. return;
  141. }
  142. setSelectView(curPage);
  143. setActionStatus(curPage);
  144. }
  145. /**
  146. * 当前页码为1的时候上一页不可点击
  147. * 当前页码为末页的时候下一页不可点击
  148. * @param curPage
  149. */
  150. private void setActionStatus(int curPage) {
  151. if (curPage > 1) {
  152. upPage.setEnabled(true);
  153. }else {
  154. upPage.setEnabled(false);
  155. }
  156. if(totalCount > curPage){
  157. downPage.setEnabled(true);
  158. }else {
  159. downPage.setEnabled(false);
  160. }
  161. }
  162. private void setBtnGroup() {
  163. int n = maxPage / buttonCount;
  164. if (n == 0) {
  165. //只有一组
  166. firstButton = 1;
  167. lastButton = maxPage;
  168. } else {
  169. int i = curPage / buttonCount;
  170. //有n组
  171. firstButton = i * buttonCount + 1;
  172. if (firstButton > curPage) {
  173. firstButton = (i - 1) * buttonCount + 1;
  174. }
  175. lastButton = (firstButton - 1) + buttonCount;
  176. if (lastButton > maxPage && lastButton > 1) {
  177. lastButton = maxPage;
  178. }
  179. }
  180. }
  181. private void createAllView() {
  182. setBtnGroup();
  183. this.removeAllViews();
  184. this.setPadding(Utils.INSTANCE.dip2px(10), Utils.INSTANCE.dip2px(20), Utils.INSTANCE.dip2px(10), Utils.INSTANCE.dip2px(20));
  185. createPrevious();
  186. if((firstButton >= buttonCount ||curPage == buttonCount)&& totalCount > buttonCount){
  187. firstButton = curPage - 2;
  188. lastButton = curPage + 2;
  189. }
  190. if(firstButton > 1 && totalCount > buttonCount){
  191. first();
  192. middleView();
  193. }
  194. while (firstButton <= lastButton && firstButton <= totalCount) {
  195. createView(firstButton);
  196. firstButton++;
  197. }
  198. if(lastButton < totalCount){
  199. middleView();
  200. last();
  201. }
  202. createNext();
  203. }
  204. @Override
  205. public void onClick(View view) {
  206. if (mPageChangeLinstener == null) return;
  207. if (view instanceof TextView) {
  208. TextView tv = (TextView) view;
  209. String txt = tv.getText().toString();
  210. // if (txt.equalsIgnoreCase(getResources().getString(R.string.page_uppage))) {
  211. if (txt.equalsIgnoreCase("上一页")) {
  212. curPage -= 1;
  213. curPage = curPage >= 1 ? curPage : 1;
  214. setSelectView(curPage);
  215. mPageChangeLinstener.pageChanged(this, curPage);
  216. initPageComposite();
  217. return;
  218. }
  219. // if (txt.equalsIgnoreCase(getResources().getString(R.string.page_downpage))) {
  220. if (txt.equalsIgnoreCase("下一页")) {
  221. curPage += 1;
  222. curPage = curPage <= maxPage ? curPage : maxPage;
  223. setSelectView(curPage);
  224. mPageChangeLinstener.pageChanged(this,curPage);
  225. initPageComposite();
  226. return;
  227. }
  228. if(txt.equalsIgnoreCase(String.valueOf(1))){
  229. curPage = 1;
  230. setSelectView(curPage);
  231. mPageChangeLinstener.pageChanged(this,curPage);
  232. initPageComposite();
  233. return;
  234. }
  235. if(txt.equalsIgnoreCase(String.valueOf(totalCount))){
  236. curPage = totalCount;
  237. setSelectView(curPage);
  238. mPageChangeLinstener.pageChanged(this,curPage);
  239. initPageComposite();
  240. return;
  241. }
  242. }
  243. if (view.getTag() != null) {
  244. Object tag = view.getTag();
  245. curPage = Integer.parseInt(tag.toString());
  246. mPageChangeLinstener.pageChanged(this,curPage);
  247. setSelectView(curPage);
  248. initPageComposite();
  249. }
  250. }
  251. private void setSelectView(int n) {
  252. for (int i = 0; i < this.getChildCount(); i++) {
  253. View v = this.getChildAt(i);
  254. if (v.getTag() != null) {
  255. int tag = Integer.parseInt(v.getTag().toString());
  256. if (tag == n) {
  257. v.setSelected(true);
  258. // v.setBackgroundResource(R.drawable.selecter_btn_round5_red);
  259. } else {
  260. v.setSelected(false);
  261. // v.setBackgroundResource(R.drawable.selecter_btn_round5_gray);
  262. }
  263. }
  264. }
  265. }
  266. /**
  267. * 设置分页监听事件
  268. */
  269. public void setPageChangeListener(OnPageChangeListener pageChangeListener) {
  270. this.mPageChangeLinstener = pageChangeListener;
  271. }
  272. }