private void init(AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        final Context context = getContext();
        final Resources resources = getResources();
        final boolean notEdit = !isInEditMode();

        setFocusable(true);
        setWillNotDraw(false);

        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();


        mRipple = new AlmostRippleDrawable(UiCompat.getColorStateList(resources, R.color.g_default_seek_bar_ripple));
        mRipple.setCallback(this);

        mSeekBarDrawable = new SeekBarDrawable(UiCompat.getColorStateList(resources, R.color.g_default_seek_bar_track),
                UiCompat.getColorStateList(resources, R.color.g_default_seek_bar_scrubber),
                UiCompat.getColorStateList(resources, R.color.g_default_seek_bar_thumb));
        mSeekBarDrawable.setCallback(this);

        // Init
        if (attrs == null) {
            mSeekBarDrawable.setTrackStroke(resources.getDimensionPixelSize(R.dimen.g_seekBar_trackStroke));
            mSeekBarDrawable.setScrubberStroke(resources.getDimensionPixelSize(R.dimen.g_seekBar_scrubberStroke));
            mSeekBarDrawable.setTouchRadius(resources.getDimensionPixelSize(R.dimen.g_seekBar_touchSize));
            mSeekBarDrawable.setTickRadius(resources.getDimensionPixelSize(R.dimen.g_seekBar_tickSize));
            mSeekBarDrawable.setThumbRadius(resources.getDimensionPixelSize(R.dimen.g_seekBar_thumbSize));

            if (notEdit) {
                mIndicator = new PopupIndicator(context);
                mIndicator.setListener(mFloaterListener);
                mIndicator.setIndicatorColor(UiCompat.getColorStateList(resources, R.color.g_default_seek_bar_indicator));
                mIndicator.setIndicatorClosedSize(mSeekBarDrawable.getThumbRadius() * 2);
            }

        } else {
            initAttrs(context, resources, notEdit, attrs, defStyleAttr, defStyleRes);
        }

        // Set Values
        mSeekBarDrawable.setNumSegments(mMax - mMin);
        updateKeyboardRange();

        // End
        setNumericTransformer(new DefaultNumericTransformer());
        isRtl();
    }
This abstract class use to SeekBar
<p>
<p><strong>XML attributes</strong></p>
<p>
See {@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gAllowTrackClickToDrag Attributes},
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gFont Attributes},
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gIndicator Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gIndicatorBackgroundColor Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gIndicatorFormatter Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gIndicatorSeparation Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gIndicatorTextAppearance Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gIndicatorTextPadding Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gMax Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gMin Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gMirrorForRtl Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gRippleColor Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gScrubberColor Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gScrubberStroke Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gThumbColor Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gThumbSize Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gTickSize Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gTouchSize Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gTrackStroke Attributes}
{@link net.qiujuer.genius.ui.R.styleable#AbsSeekBar_gValue Attributes}
caprice/ui/src/main/java/net/qiujuer/genius/ui/widget/AbsSeekBar.java