最近项目让做了一个注册流程是选择年龄的,规定是手动横幅型的选择器,顺便让他给了个模仿对象的apk
效果如下:
怎么办呢,最后反编译了那个apk,从里面找到了这个控件发现他也是引用的一个别人的依赖话不多说依赖先放这里:
dependencies {
compile 'com.lantouzi.wheelview:library:1.1.2'
}
然后这个大佬的 github 我也放这里,能用到这个控件的朋友可以看一下:
说一下如果大家不想用依赖的话,也是可以的
接下来是我将依赖中的代码提取出来的代码:
- WheelView.java
package com.online.myceshidemo.common;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextPaint;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.SoundEffectConstants;
import android.view.View;
import android.widget.OverScroller;
import androidx.core.view.GestureDetectorCompat;
import androidx.core.view.ViewCompat;
import com.online.myceshidemo.R;
import java.util.ArrayList;
import java.util.List;
/**
* Created by kyle on 15/11/9.
*/
public class WheelView extends View implements GestureDetector.OnGestureListener {
public static final float DEFAULT_INTERVAL_FACTOR = 1.2f;
public static final float DEFAULT_MARK_RATIO = 0.7f;
private Paint mMarkPaint;
private TextPaint mMarkTextPaint;
private int mCenterIndex = -1;
private int mHighlightColor, mMarkTextColor;
private int mMarkColor, mFadeMarkColor;
private int mHeight;
private List<String> mItems;
private String mAdditionCenterMark;
private OnWheelItemSelectedListener mOnWheelItemSelectedListener;
private float mIntervalFactor = DEFAULT_INTERVAL_FACTOR;
private float mMarkRatio = DEFAULT_MARK_RATIO;
private int mMarkCount;
private float mAdditionCenterMarkWidth;
private Path mCenterIndicatorPath = new Path();
private float mCursorSize;
private int mViewScopeSize;
// scroll control args ---- start
private OverScroller mScroller;
private float mMaxOverScrollDistance;
private RectF mContentRectF;
private boolean mFling = false;
private float mCenterTextSize, mNormalTextSize;
private float mTopSpace, mBottomSpace;
private float mIntervalDis;
private float mCenterMarkWidth, mMarkWidth;
private GestureDetectorCompat mGestureDetectorCompat;
// scroll control args ---- end
private int mLastSelectedIndex = -1;
private int mMinSelectableIndex = Integer.MIN_VALUE;
private int mMaxSelectableIndex = Integer.MAX_VALUE;
public WheelView(Context context) {
super(context);
init(null);
}
public WheelView(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public WheelView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(attrs);
}
protected void init(AttributeSet attrs) {
float density = getResources().getDisplayMetrics().density;
mCenterMarkWidth = (int) (density * 1.5f + 0.5f);
mMarkWidth = density;
mHighlightColor = 0xFFF74C39;
mMarkTextColor = 0xFF666666;
mMarkColor = 0xFFEEEEEE;
mCursorSize = density * 18;
mCenterTextSize = density * 22;
mNormalTextSize = density * 18;
mBottomSpace = density * 6;
TypedArray ta = attrs == null ? null : getContext().obtainStyledAttributes(attrs, R.styleable.lwvWheelView);
if (ta != null) {
mHighlightColor = ta.getColor(R.styleable.lwvWheelView_lwvHighlightColor, mHighlightColor);
mMarkTextColor = ta.getColor(R.styleable.lwvWheelView_lwvMarkTextColor, mMarkTextColor);
mMarkColor = ta.getColor(R.styleable.lwvWheelView_lwvMarkColor, mMarkColor);
mIntervalFactor = ta.getFloat(R.styleable.lwvWheelView_lwvIntervalFactor, mIntervalFactor);
mMarkRatio = ta.getFloat(R.styleable.lwvWheelView_lwvMarkRatio, mMarkRatio);
mAdditionCenterMark = ta.getString(R.styleable.lwvWheelView_lwvAdditionalCenterMark);
mCenterTextSize = ta.getDimension(R.styleable.lwvWheelView_lwvCenterMarkTextSize, mCent