主要实现一个RecylerView
的Adapter
去做一把尺子
先上地址: https://github.com/adgvcxz/RulerRecyclerView
- 超轻量
- 更多的自定义选项
- 监听刻度变化
- 简单易用,扩展性高
效果:
实现思路:
目前大多尺子是一个自定View去实现的,很少用到RecylerView
该Adapter主要分为3部分:尺子的左半部分,中间部分,右半部分。
每个刻度组只有一个长刻度线
Adapter:
**
* 设置刻度的数量,以及多少刻度为一个组
*/
public Builder setNumberAndGroup(int number, int groupNumber) {
mRulerAdapter.mScaleNumber = number;
mRulerAdapter.mGroupNumber = groupNumber;
mRulerAdapter.mLeftNumber = (int) (Math.ceil((float) (groupNumber - 1) / 2)); //每个刻度左半部分刻度线的数量
mRulerAdapter.mRightNumber = (int) (Math.floor((float) (groupNumber - 1) / 2)); //每个刻度右半部分刻度线的数量
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; //如果所有刻度小于一个组的刻度数量 则只有右半部分和左半部分
} else {
int number = mScaleNumber - mRightNumber - 1;
return 2 + number / mGroupNumber; // 含有中间部分的刻度
}
}
}
return 0;
}
明天继续 第一次写 尼玛完全不知道怎么去表达。