获奖转盘学习的要点记录

简介:

在慕课网上学习了鸿洋大神的获奖转盘的制作的课程,感觉还是比较有意思的,主要是通过surfaceView来进行绘制,surfaceView比view更加适合这个场景,其中surfaceView在我前一篇博客也做了一些介绍认识surfaceView  整个装盘制作过程也涉及到其他很多知识点,比如自定义控件的制作,特别是Canvas画布和Pain画笔的应用,这里对转盘代码中一些核心点做一些说明,整个过程也很清晰,主要包括:

绘制背景、绘制盘块、绘制文本、绘制图标

先看整体效果图



1、绘制背景

[java]  view plain  copy
  1. private void drawBg() {  
  2.         // 绘制背景  
  3.         mCanvas.drawColor(0xffffffff);  
  4.         mCanvas.drawBitmap(mBgBitmap, nullnew RectF(mPadding / 2,  
  5.                 mPadding / 2, getMeasuredWidth() - mPadding / 2,  
  6.                 getMeasuredHeight() - mPadding / 2), null);  
  7.   
  8.     }  

这里涉及到canvas中的drawColor函数

 drawColor(int color)

作用:绘制颜色覆盖画布,常用于刷屏

drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)

参数:第一个参数 图片对象,第二个参数 对图片进行裁剪,若为null则表示使用整个图片,第三个参数表示图片在canvas画布显示的位置,第四个参数表示画笔

对应图中就是绘制了棕色的圆块


2、绘制盘块

[java]  view plain  copy
  1.                                   mArcPaint.setColor(mColors[i]);  
  2. Canvas.drawArc(mRange, tmpAngle, sweepAngle, true,  
  3.     mArcPaint);// 绘制弧形(扇形)  
  4. **  
  5. * 参数说明: 第一个参数:矩形实例 第二个参数:弧形的起始角度 第三个参数:弧形的终止角度  
  6. * 第四个参数:是否绘制中心点  
  7. * ,若为真,起始点与终止点都会分别连接中心,从而形成封闭图形;如果为假,则起始点直接连接终止点,从而形成封闭图形  
  8. */  

这里主要是在for循环中完成

       1)填充颜色  setC olor

       2)绘制圆弧 draArc(RectF oval,flaot startAngle,float sweepAngle,boolean useCenter Pain paint)

参数说明:

第一个参数 矩形实例

第二个参数:弧形的起始角度(默认45°为图形起始角度)

第三个参数:弧形的终止角度

第四个参数:是否绘制中心点,若为真起始点与终止点都会分别连接圆心形成封闭图形,若为假,则起始点直接连接终止点,形成线段

此时通过for循环这样就绘制出了6个黄橙交替的圆块


3、绘制文本

[java]  view plain  copy
  1. // 绘制每个盘块的文本  
  2. private void drawText(float tmpAngle, float sweepAngle, String string) {  
  3.     Path path = new Path();  
  4.     path.addArc(mRange, tmpAngle, sweepAngle); // 圆弧路径  
  5.     float textWidth = mTextPaint.measureText(string);  
  6.     // 利用水平偏移量让文字居中  
  7.     int hOffset = (int) (mRadius * Math.PI / mItemCount / 2 - textWidth / 2);  
  8.     // 垂直偏移量  
  9.     int vOffset = mRadius / 2 / 6;  
  10.     mCanvas.drawTextOnPath(string, path, hOffset, vOffset, mTextPaint);  
  11. }  


这里的文本是按照弧线来居中分布的,主要使用drawTextOnPath(String text,Path path,float hOffset,float vOffset,Paint paint)

作用:将本文沿着指定的路径进行绘制

第一个参数:文本

第二个参数:路径实例

第三个参数:文本距离绘制起点的距离

第四个参数:文本距离路径的距离

第五个参数: 画笔实例

这里mRadius * Math.PI / mItemCount / 2 - textWidth / 2  ,mRadius * Math.PI / mItemCount / 2每个圆弧一般的长度,减去文本宽度/2,这样文字居中了

再将其垂直移动 直径的12分之一,mRadius / 2 / 6,这样文本居中显示

4、绘制图标

[java]  view plain  copy
  1. // 绘制图片  
  2.     private void drawIconn(float tmpAngle, Bitmap bitmap) {  
  3.         // TODO Auto-generated method stub  
  4.         // 设置图片宽度为直径的1/2  
  5.         int imgWidth = mRadius / 8;  
  6.         float angle = (float) ((tmpAngle + 360 / mItemCount / 2) * Math.PI / 180);// 弧长  
  7.         int x = (int) (mCenter + mRadius / 2 / 2 * Math.cos(angle));  
  8.         int y = (int) (mCenter + mRadius / 2 / 2 * Math.sin(angle));// 图片中心点位置  
  9.         // 确定图片  
  10.         Rect rect = new Rect(x - imgWidth / 2, y - imgWidth / 2, x + imgWidth  
  11.                 / 2, y + imgWidth / 2);  
  12.         mCanvas.drawBitmap(bitmap, null, rect, null);  
  13.   
  14.     }  

主要是图片根据根据圆心夹角算出坐标即可,盗取鸿洋大神的图片做个示范

我们希望图片在中间的那个点,点距离圆心即center的距离为r = mRadius /2 / 2 ;

绿线与水平线的夹角为a = 360 / count / 2 ,

于是那个点的坐标为:(mCenter + r * cos a , mCenter + r * sina );

其他的点同理,唯一变化就是a 的角度 ,在计算时需要把a转化为弧度制


推荐大家去慕课网学习一下,手动敲敲代码


转载:http://blog.csdn.net/xsf50717/article/details/48708363

目录
相关文章
|
3天前
蓝桥杯省赛冲刺(1 补充)考试流程 做题技巧 手算题 杂题
蓝桥杯省赛冲刺(1 补充)考试流程 做题技巧 手算题 杂题
6 0
|
4月前
|
人工智能
一张图+两句话=今年第一条冬日氛围感拉满的朋友圈
魔搭社区上两款隐藏的 打造冬日氛围感神器 小编不允许还有小伙伴不知道!FaceChain冬季汉服写真 + 百变“冻人”风格创意艺术字  ,让你足不出户就能收获冬意满满的九宫格素材。
|
7月前
|
JSON 前端开发 数据格式
你想要的错题分析
你想要的错题分析
|
10月前
新增节添加代码【滴水逆向三期46笔记】
新增节添加代码【滴水逆向三期46笔记】
|
11月前
新增闯关模式,邀请好朋友测试
计划为精致1010新增闯关模式,先把游戏原型做出来了,希望朋友们可以先行体验,并给予反馈和意见。
67 0
|
12月前
|
机器学习/深度学习 传感器 算法
2023年五一数学建模竞赛思路及参考代码提前预约
2023年五一数学建模竞赛思路及参考代码提前预约
|
存储 easyexcel 数据库
项目第六天内容介绍 | 学习笔记
快速学习 项目第六天内容介绍
73 0
项目第六天内容介绍 | 学习笔记
|
前端开发 开发者 微服务
项目第七天内容介绍 | 学习笔记
快速学习 项目第七天内容介绍
46 0
|
机器人
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【05】天(准考证组委会已下发,请查询)
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【05】天(准考证组委会已下发,请查询)
68 0
|
机器学习/深度学习
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】天(准考证组委会已下发,请查询)-1
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】天(准考证组委会已下发,请查询)
84 0
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】天(准考证组委会已下发,请查询)-1