主要實(shí)現(xiàn)一個(gè)RecylerView
的Adapter
去做一把尺子
先上地址: https://github.com/adgvcxz/RulerRecyclerView
- 超輕量
- 更多的自定義選項(xiàng)
- 監(jiān)聽刻度變化
- 簡單易用撞蚕,擴(kuò)展性高
效果:
實(shí)現(xiàn)思路:
目前大多尺子是一個(gè)自定View去實(shí)現(xiàn)的省艳,很少用到RecylerView
該Adapter主要分為3部分:尺子的左半部分,中間部分派昧,右半部分特笋。
每個(gè)刻度組只有一個(gè)長刻度線
Adapter:
**
* 設(shè)置刻度的數(shù)量剃浇,以及多少刻度為一個(gè)組
*/
public Builder setNumberAndGroup(int number, int groupNumber) {
mRulerAdapter.mScaleNumber = number;
mRulerAdapter.mGroupNumber = groupNumber;
mRulerAdapter.mLeftNumber = (int) (Math.ceil((float) (groupNumber - 1) / 2)); //每個(gè)刻度左半部分刻度線的數(shù)量
mRulerAdapter.mRightNumber = (int) (Math.floor((float) (groupNumber - 1) / 2)); //每個(gè)刻度右半部分刻度線的數(shù)量
mRulerSnapHelper.setLeftAndRight(mRulerAdapter.mLeftNumber, mRulerAdapter.mRightNumber);
return this;
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return LEFT_SPACING; //左半部分
}
if (position == getItemCount() - 1) {
return RIGHT_SPACING; //右半部分
}
return LINE; //中間部分
}
@Override
public int getItemCount() {
if (mLeftNumber > 0) {
if (mRightNumber >= mScaleNumber) {
return 1; //如果右半部分刻度大于所有刻度 則只有右半部分
} else {
if (mGroupNumber + mRightNumber + 1 >= mScaleNumber) {
return 2; //如果所有刻度小于一個(gè)組的刻度數(shù)量 則只有右半部分和左半部分
} else {
int number = mScaleNumber - mRightNumber - 1;
return 2 + number / mGroupNumber; // 含有中間部分的刻度
}
}
}
return 0;
}
明天繼續(xù) 第一次寫 尼瑪完全不知道怎么去表達(dá)巾兆。