Android实现一个轻量的尺子(1)

主要实现一个RecylerViewAdapter去做一把尺子

先上地址: 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;
}

明天继续 第一次写 尼玛完全不知道怎么去表达。

你可能感兴趣的:(Android实现一个轻量的尺子(1))