《Android群英传》 使用Canvas绘图
来源:互联网 发布:襄阳网络电视台 编辑:程序博客网 时间:2024/05/16 00:45
先上图
在看徐医生的《Android群英传》的android绘制技巧(117页),遇到canvas绘图。于是就实现了下书上的代码。顺便扩展了一下,画了一个时间表。
代码地址:时间表
Paint
setAntiAlias(boolean);//设置锯齿
setColor();//设置画笔颜色
setARGB();//设置画笔的ARGB
setAlpha();//设置透明度
setTextSize();//设置字体大小
setStyle();//设置风格,有三种可选。Stroke,Fill,Stroke And Fill
setStrokeWidth();//设置边框跨度
measureText();//获取该字体宽度
Canvas绘图
一般使用的方法:
- drawPoint(x,y,paint);
- drawLine(startX,startY,endX,endY);
- drawLines(float[],paint);
- drawRect(left,top,right,bottom,paint);
- drawRoundRect(left,top,right,bottom,radiusX,radiusY,paint);
- drawCircle(circleX,circleY,radis,paint);
- drawArc();//绘制弧形和扇形
- drawOval();
- drawText(text,startX,startY,paint);
- drawPosText();//在指定位置上画字
- drawPath();//绘制路径
绘制技巧:
- canvas.save();
- canvas.restore();
- canvas.translate(px,py);//平移画布,正右负左
- canvas.rotate(degrees);
- canvas.rotate(degrees,pivotX,pivotY);//以该点为圆心顺时针旋转
代码
在画该时间表时,难的就是对平移到圆心之后的canvas的旋转。期间配合save()和restore()方法不断进行入栈和出栈操作,使canvas将指针画在正确的位置上。
canvas.save();//保存当前画布 canvas.translate(mWidth / 2, mHeight / 2);//平移到圆心 //画时针,单独开画布,以免影响后续操作 canvas.save(); canvas.rotate(30 * (hour - 3)); canvas.drawLine(0, 0, 150, 0, hourPaint); canvas.restore(); //画分针 canvas.save(); canvas.rotate(6 * (minute - 15)); canvas.drawLine(0, 0, 320, 0, minutePaint); canvas.restore(); //画秒针 canvas.rotate(6 * (second - 15), 0, 0); canvas.drawLine(0, 0, mWidth / 2 - 100, 0, secondPaint); canvas.restore();
完成第一步正确定位后,又使用postDelay()方法使该自定义控件执行定时事件,像钟表一样一秒一秒的走。
init(){ post(timeClick); } Runnable timeClick = new Runnable() { @Override public void run() { Calendar instance = Calendar.getInstance(); int startHour = instance.get(Calendar.HOUR); int startMinute = instance.get(Calendar.MINUTE); second = instance.get(Calendar.SECOND); //精确计算时间和分钟 hour = startHour + startMinute / (float) 60 + second / (float) 3600; minute = startMinute + second / (float) 60; LogUtil.d(hour + ", " + minute + ", " + second); postInvalidate(); postDelayed(this, 1000);//重复执行该动作,使秒针动起来 } };
在onMeasure()中已经支持wrap_content,之后有时间支持padding属性。
0 0
- 《Android群英传》 使用Canvas绘图
- Android--使用Canvas绘图
- Android使用Canvas绘图
- 绘图——Android群英传
- android 使用canvas绘图保留痕迹
- Android:图形图像之使用Canvas,Paint绘图
- Android中Canvas绘图之PorterDuffXfermode使用
- Android群英传读书笔记-2D绘图基础
- 绘图机制与图片处理-Android群英传
- 【canvas】Android Canvas绘图详解
- android 绘图 Canvas
- Android Canvas绘图
- Canvas绘图android机器人
- Android绘图Canvas、Paint
- Android Canvas绘图详解
- android 高级Canvas绘图
- Android Canvas绘图详解
- Android Canvas绘图详解
- Dubbo Notes
- c#---写文件
- hdoj 5630 Rikka with Chess
- Activity中数据传递(Bundle封装数据)
- JVM原理及优化
- 《Android群英传》 使用Canvas绘图
- Maximum Subsequence Sum
- EditorWindow
- centos7 HA
- 列出十分钟内占用cpu最多的几个进程
- 机房重构—删除用户析DataGridView
- 我的Android进阶之旅------>Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能
- 层次概率聚类算法
- 项目2:就拿胖子说事---(4)计算出标准体重,输出体重状态(正常/超重/超轻)