您的位置:首页 > 移动开发 > Android开发

Android自定义音量条控件

2016-01-22 18:16 411 查看
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) ;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: