Android自定义View之仪表盘
来源:互联网 发布:淘宝接单软件下载 编辑:程序博客网 时间:2024/05/01 21:24
新建项目,新建DashBoardView
继承自View
实现OnGlobalLayoutListener
接口,并重写OnDraw
方法。
使用OnGlobalLayoutListener
接口需要重写onGlobalLayout
方法,在这个方法中我们将获取View的宽高。
新建如下变量:
private Context mContext; private Paint mCirclePaint,mDegreePaint,mHourPaint,mMinPaint; private int mViewWidth,mViewHeight;
初始化这些变量:
public void init(Context context){ mContext = context; mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mDegreePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mHourPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mMinPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mCirclePaint.setAntiAlias(true); mCirclePaint.setStrokeWidth(5); mCirclePaint.setStyle(Paint.Style.STROKE); mHourPaint.setStrokeWidth(20); mMinPaint.setStrokeWidth(10); getViewTreeObserver().addOnGlobalLayoutListener(this); }
onGlobalLayout
中初始化DashBoardView
宽高:
@Override public void onGlobalLayout() { mViewHeight = getHeight(); mViewWidth = getWidth(); }
在onDraw方法中添加如下绘制代码:
/* * 画表盘圆形 * */ canvas.drawCircle(mViewWidth/2,mViewHeight/2,mViewWidth/2,mCirclePaint); /* * 画刻度 * */ for (int i=0;i<24;i++){ if(i==0 || i==6 || i==12 || i==18){ /* * 画整点刻度 * */ mDegreePaint.setStrokeWidth(5); mDegreePaint.setTextSize(30); canvas.drawLine(mViewWidth/2,mViewHeight/2-mViewWidth/2,mViewWidth/2,mViewHeight/2-mViewWidth/2+60,mDegreePaint); String degree = String.valueOf(i); canvas.drawText(degree,mViewWidth/2-mDegreePaint.measureText(degree)/2,mViewHeight/2-mViewWidth/2+90,mDegreePaint); }else{ mDegreePaint.setStrokeWidth(3); mDegreePaint.setTextSize(15); canvas.drawLine(mViewWidth/2,mViewHeight/2-mViewWidth/2,mViewWidth/2,mViewHeight/2-mViewWidth/2+30,mDegreePaint); String degree = String.valueOf(i); canvas.drawText(degree,mViewWidth/2-mDegreePaint.measureText(degree)/2,mViewHeight/2-mViewWidth/2+90,mDegreePaint); } /* * 通过旋转画布来画好所有的刻度 * */ canvas.rotate(15,mViewWidth/2,mViewHeight/2); } /* * 画指针 * */ mHourPaint.setStrokeWidth(20); mMinPaint.setStrokeWidth(10); canvas.save(); canvas.translate(mViewWidth/2,mViewHeight/2); canvas.drawLine(0,0,100,100,mHourPaint); canvas.drawLine(0,0,100,200,mMinPaint); canvas.restore();
至此我们就完成了一个仪表盘的绘制。效果图如下:
完整代码下载:完整项目
0 0
- Android自定义View之仪表盘
- Android 自定义View之八等份仪表盘
- 时尚仪表盘 Android 自定义View
- android自定义view之汽车仪表盘增强版
- Android自定义view之仿支付宝芝麻信用仪表盘
- <Android 进阶(一)> 自定义View之仪表盘进度条
- 自定义View之仪表盘版进度条
- android 自定义View 仪表盘 DashboardView 的实现
- Android自定义view之仿支付宝芝麻信用仪表盘 ---by ccy
- android 自定义控件之汽车仪表盘
- Android 仪表盘View
- 手把手带你画一个 时尚仪表盘 Android 自定义View
- 手把手带你画一个 时尚仪表盘 Android 自定义View
- 手把手带你画一个 时尚仪表盘 Android 自定义View
- 手把手带你画一个 时尚仪表盘 Android 自定义View
- Android自定义View----时钟/仪表盘的简单实现
- Android绘图系列(三)——自定义View绘制仪表盘
- android自定义View(仪表盘),多属性可设置
- 杂谈:我的百度账号被盗
- OC阅读笔记十九:禁用retainCount
- 最流行的开源框架之一:ehcache
- LZW压缩算法
- 最简单的基于FFmpeg的AVDevice例子(读取摄像头)
- Android自定义View之仪表盘
- Linux上使用Qt Creator进行C/C++开发
- [JZOJ4438]K小数查询
- C语言中的Bool类型
- jQuery选择器总结
- http协议
- MFC改变编辑框默认显示内容
- 解决:Mysql exceeds the lock table size 不指定
- linux下编译ffmpeg