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) ; } }
相关文章推荐
- Android的Activity之间传对象的方法
- 【Android】实现新闻分类(二级下拉菜单)效果
- Androidx学习笔记(16)-- 数据存储之 SharedPreference
- Android 注解工具ButterKnife源码分析
- Android应用程序消息处理机制
- Android MimeType的用途以及所有类型
- 纯ant命令行打包android apk之图文从原理角度完全详解android打包过程(打包系列教程之一)
- 获取Android屏幕尺寸、控件尺寸、状态栏/通知栏高度、导航栏高度
- Androidx学习笔记(14)-- Android文件的访问权限
- 让Activity在Android5.0上全屏
- Android.mk 文件语法详解
- Android 沉浸式状态栏 statusBar
- Androidx学习笔记(13)-- 获取sd卡剩余容量的代码
- Android运行时异常“Binary XML file line # : Error inflating class”
- android canvas Rotate 图片中心旋转
- Android kernel printk概览
- Android - ADB调试桥
- Android中的同步与Mutex
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- git clone cm source & cm vs android version