Android自定义音量条控件


public class SoundSeekBar extends View{
    /**
     * 当前值
     */
    private int percentage=0;
    /**
     * 左右间距
     */
    private int padding=10;

    /**
     * 画笔
     */
    Paint myPaint=new Paint();

    /**
     * 当前值监听接口
     */
    private OnPercentageChangeListener myOnPercentageChangeListener;


    public int getPercentage() {
        return percentage;
    }

    public void setPercentage(int percentage) {
        this.percentage = percentage;
    }

    public int getPadding() {
        return padding;
    }

    public void setPadding(int padding) {
        this.padding = padding;
    }

    public SoundSeekBar(Context context) {
        super(context);
    }

    public SoundSeekBar(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SoundSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void setOnPercentageChangeListener(OnPercentageChangeListener onPercentageChangeListener)
    {
        this.myOnPercentageChangeListener=onPercentageChangeListener;
    };

    @Override
    protected void onDraw(Canvas canvas) {
        myPaint.setColor(0xffdcdcdc);
        myPaint.setStyle(Paint.Style.FILL);
        Path backPath=new Path();
        // 去锯齿
        myPaint.setAntiAlias(true);
        backPath.moveTo(padding, getHeight());
        backPath.lineTo(getWidth()-padding, 0);
        backPath.lineTo(getWidth()-padding, getHeight());
        backPath.close();
        canvas.drawPath(backPath, myPaint);
        Path percentagePath = new Path();
        percentagePath.moveTo(0, getHeight());
        percentagePath.lineTo(padding+(getWidth()-2*padding) * percentage / 100, getHeight());
        percentagePath.lineTo(padding+(getWidth()-2*padding) * percentage / 100, getHeight()*(float)(1-(percentage/100.0)));
        percentagePath.close();
        myPaint.setColor(0xffff0000);
        canvas.drawPath(percentagePath,myPaint);
        super.onDraw(canvas);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction()==MotionEvent.ACTION_DOWN ||event.getAction()==MotionEvent.ACTION_MOVE)
        {
           int per=(int)(((event.getX()-padding-getX())/(float)(getWidth()-2*padding))*100);
            if (percentage != per && per >= 0 && per <= 100) {

                   percentage = per;
                   postInvalidate();

            }  else if(percentage>100)
            {
                percentage = 100;
                postInvalidate();
            }else if(percentage<0)
            {
                percentage=0;
                postInvalidate();
            }
            if(myOnPercentageChangeListener!=null)
            {
                myOnPercentageChangeListener.onPercentagerChange(percentage);
            }
        }
        return true;
    }

    public interface OnPercentageChangeListener
    {
        public void onPercentagerChange(int percentage) ;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值