Android进阶——自定义View之双向选择Seekbar

android 原生的seekbar只能单向选择滑动,当项目需要选取范围的时候,这明显是不能够满足要求的。所以就得自己实现一个双向滑动的Seekbar了,就取名为DoubleSeekBar吧。
而自定义View由是Android知识点中必须掌握的技能所以,这里就写一下自己的实现吧。着急的同学,可以直接拷贝代码直接使用。
由于布局比较简单,这里直接继承View,然后重写onLayout(),onMeasure(),onDraw()方法,代码里注释比较齐全,想多了解的,可以看着注释理解下。
代码如下:

public class DoubleSeekBar extends View {
    private static final String TAG = "DoubleSeekBar";
    private static final int CLICK_TYPE_NULL = 0;
    private static final int CLICK_TYPE_LEFT = 1;
    private static final int CLICK_TYPE_RIGHT = 2;

    private Bitmap leftIcon;
    private Bitmap rightIcon;
    private Bitmap clickIcon;

    private int maxValue;//最大值
    private int minValue;//最小值
    private int leftValue, rightValue;
    private int defaultWidth = 0;
    private int defaultHeight = 0;

    private float bgHeight;
    private float paddingLeft, paddingRight;
    private float indexLeftX, indexLeftY;//左按钮的坐标值
    private float indexRightX, indexRightY;//右按钮的坐标值

    private int viewWidth, viewHeight;
    private float startLeftX, startRightX;//左右按钮的开始x轴坐标值

    private int clickedType = CLICK_TYPE_NULL;//0 没有点击,1点击中左按钮,2点击中右按钮

    private Paint paintBg = new Paint(Paint.ANTI_ALIAS_FLAG);
    private Paint paintBg2 = new Paint(Paint.ANTI_ALIAS_FLAG);
    private Paint iconPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    private OnChanged mOnChanged;


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

    public DoubleSeekBar(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public DoubleSeekBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        bgHeight = UIUtil.dp2px(context, 2);//设置背景线条的高度

        leftIcon = getBitmap(R.drawable.double_seek_bar_icon);
        rightIcon = getBitmap(R.drawable.double_seek_bar_icon);
        clickIcon = getBitmap(R.drawable.double_seek_bar_click_icon);
        paddingLeft = UIUtil.dp2px(context, 16);
        paddingRight = UIUtil.dp2px(context, 16);

        paintBg.setColor(getResources().getColor(R.color.md_red_A400));
        paintBg2.setColor(getResources().getColor(R.color.md_grey_400));
        maxValue = 100;//default maxvalue
        minValue = 0;//default minvalue
        leftValue = minValue;
        rightValue = maxValue;

        defaultWidth = UIUtil.dp2px(context, 100);
        defaultHeight = UIUtil.dp2px(context, 50);
        setLayerType(LAYER_TYPE_SOFTWARE, null);
    }

    private Bitmap getBitmap(int drawableRes) {
        Drawable drawable = getResources().getDrawable(drawableRes);
  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值