android SeekBar双滑块区间设置

实现区间阈值,自定义区间大小,步进大小,单位设置。

一、自定义属性

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="SeekBarPressure">
        <attr name="seek_min" format="integer" />
        <attr name="seek_max" format="integer" />
        <attr name="seek_step" format="integer" />
        <attr name="seek_unit" format="string" />
        <attr name="seek_low_offset" format="dimension" />
        <attr name="seek_high_offset" format="dimension" />
    </declare-styleable>


</resources>

二、自定义SeekBarPressure类

public class SeekBarPressure extends View {
    private static final String TAG = "SeekBarPressure";
    private static final int CLICK_ON_LOW = 1;      //点击在前滑块上
    private static final int CLICK_ON_HIGH = 2;     //点击在后滑块上
    private static final int CLICK_IN_LOW_AREA = 3;
    private static final int CLICK_IN_HIGH_AREA = 4;
    private static final int CLICK_OUT_AREA = 5;
    private static final int CLICK_INVAILD = 0;
    /*
     * private static final int[] PRESSED_STATE_SET = {
     * android.R.attr.state_focused, android.R.attr.state_pressed,
     * android.R.attr.state_selected, android.R.attr.state_window_focused, };
     */
    private static final int[] STATE_NORMAL = {};
    private static final int[] STATE_PRESSED = {android.R.attr.state_pressed, android.R.attr.state_window_focused,};
    private Drawable hasScrollBarBg;        //滑动条滑动后背景图
    private Drawable notScrollBarBg;        //滑动条未滑动背景图
    private Drawable mThumbLow;         //前滑块
    private Drawable mThumbHigh;        //后滑块

    private int mScollBarWidth;     //控件宽度=滑动条宽度+滑动块宽度
    private int mScollBarHeight;    //滑动条高度

    private int mThumbWidth;        //滑动块宽度
    private int mThumbHeight;       //滑动块高度

    private int mOffsetLow = 0;     //前滑块中心坐标
    private int mOffsetHigh = 0;    //后滑块中心坐标

    private int mLastOffsetLow = -1;     //前滑块中心坐标之前位置
    private int mLastOffsetHigh = -1;    //后滑块中心坐标之前位置
    private double mDistance = 0;      //总刻度是固定距离 两边各去掉半个滑块距离

    private int mThumbMarginTop = 25;   //滑动块顶部距离上边框距离,也就是距离字体顶部的距离

    private int mFlag = CLICK_INVAILD;
    private OnSeekBarChangeListener mBarChangeListener;


    private double mSeekLow = 0;    //前滑块数值位置
    private double mSeekHigh = 10;  //后滑块数值位置

    private String mUnit = "mm";     //单位

    private int mSeekMin;
    private int mSeekMax;
    private double mSeekStep;
    private double mSeekTotal;//总步数


    public SeekBarPressure(Context context) {
        this(context, null);
    }

    public SeekBarPressure(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public SeekBarPressure(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.SeekBarPressure);
        mSeekMin = typedArray.getInteger(R.styleable.SeekBarPressure_seek_min, 0);
        mSeekMax = typedArray.getInteger(R.styleable.SeekBarPressure_seek_max, 0);
        mSeekStep = typedArray.getInteger(R.styleable.SeekBarPressure_seek_step, 1);
        mSeekTotal = (mSeekMax - mSeekMin) / mSeekStep;
        mUnit = typedArray.getString(R.styleable.SeekBarPressure_seek_unit);
        typedArray.recycle();


        Resources resources = getResources();
        notScrollBarBg = resources.getDrawable(R.drawable.seekbarpressure_bg_normal);
        hasScrollBarBg = resources.getDrawable(R.drawable.seekbarpressure_bg_progress);
        mThumbLow = resources.getDrawable(R.drawable.seekbarpressure_thumb);
        mThumbHigh = resources.getDrawable(R.drawable.seekbarpressure_thumb);

        mThumbLow.set
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值